From 0cdd3d106b542c4f7e04aea56390363d2cb2a93d Mon Sep 17 00:00:00 2001 From: Ian C Date: Sat, 14 Dec 2019 19:56:02 +0000 Subject: Updates to work with new BlitzMax. --- missile_lock.bmx | 976 +++++++++++++++++++++++++++---------------------------- 1 file changed, 488 insertions(+), 488 deletions(-) (limited to 'missile_lock.bmx') diff --git a/missile_lock.bmx b/missile_lock.bmx index b8575ec..1ec92f3 100644 --- a/missile_lock.bmx +++ b/missile_lock.bmx @@ -1,488 +1,488 @@ -' Missile Lock -' -' Copyright (C) 2006 Ian Cowburn (ianc@noddybox.co.uk) -' -' This program is free software; you can redistribute it and/or modify -' it under the terms of the GNU General Public License as published by -' the Free Software Foundation; either version 2 of the License, or -' (at your option) any later version. -' -' This program is distributed in the hope that it will be useful, -' but WITHOUT ANY WARRANTY; without even the implied warranty of -' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -' GNU General Public License for more details. -' -' You should have received a copy of the GNU General Public License -' along with this program; if not, write to the Free Software -' Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -' -' ------------------------------------------------------------------------- -' -' $Id$ -' -Strict -Framework brl.basic -Import brl.max2d -Import brl.glmax2d -?Win32 -Import brl.d3d7max2d -? - -Import noddybox.bitmapfont -Import noddybox.keysyms -Import noddybox.showlicense - -Import "global.bmx" -Import "gametypes.bmx" -'Import "game.bmx" -Import "particle.bmx" -'Import "help.bmx" -Import "sound.bmx" - -Incbin "short_license.txt" -Incbin "license.txt" - -' =================================== -' Initialise -' =================================== -' -SeedRnd(MilliSecs()) - -?Win32 -If Switch("--directx") - SetGraphicsDriver D3D7Max2DDriver() -Else - SetGraphicsDriver GLMax2DDriver() -EndIf -? - -Graphics 800,600,32,HERTZ -HideMouse - -SetBlend(ALPHABLEND) -SetAlpha(1.0) - - -' =================================== -' Globals -' =================================== -' -GFX.Init() ' MUST be first -SFX.Init() - -GameConfig.Load() - -If Not GameConfig.accepted - If Not ShowLicense("MISSILE LOCK -- LICENSE","incbin::short_license.txt","incbin::license.txt") - EndGraphics() - End - EndIf - GameConfig.accepted=True - GameConfig.Save() -EndIf - -Scroller.Init() -Thanks.Init() -Particles.Init() -Backdrop.Init() -Trail.Init() -MissileSet.Init() -AsteroidSet.Init() - -Global quit:Int=False -Global start_level:Int=1 - - -' =================================== -' Main -' =================================== -' -Menu() - -FlushKeys() - -While Not quit - Local start_bonus:Int=1000*(start_level-1) - - GameState.Reset() - GameState.SetLevel(start_level) - MissileSet.StartLevel() - AsteroidSet.StartLevel() - - While Not GameState.game_over - - Local alert_timer:Int=200 - - SFX.Alert() - - While Not GameState.game_over And Not MissileSet.AllDestroyed() - Cls() - - If alert_timer - alert_timer:-1 - If alert_timer Mod 60 < 30 - GFX.font.Centre("RED ALERT!",300,255,0,0) - EndIf - EndIf - - ResetCollisions() - - Backdrop.Draw() - Particles.Draw() - Trail.Draw() - - GameState.Control() - GameState.Move() - - SetRotation(GameState.ang) - - If GameState.shield - SetColor(Rand(0,255),Rand(0,255),Rand(0,255)) - Else - SetColor(255,255,255) - EndIf - - DrawImage(GFX.ship,GameState.x,GameState.y) - SetRotation(0) - - MissileSet.Update() - AsteroidSet.Update() - - Local col:Object[]=CollideImage(GFX.ship,GameState.x,GameState.y,0,ALL_LAYERS,0) - - If Not GameState.shield Then - If col - GameState.ShieldDown() - Particles.AddExplosion(GameState.x,GameState.y) - For Local m:Missile=EachIn col - If m - MissileSet.RemoveMissile(m) - GameState.AddScore(1*GameState.level) - Exit - EndIf - Next - 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 - AsteroidSet.Nuke() - - Local bonus=100*GameState.level - Local added:Int=0 - Local timer:Int=Max(HERTZ*5,bonus/10+HERTZ*3) - Local bt:Int=0 - - If GameState.gonads - GameState.AddScore(9999+(GameState.level-1)*10000) - EndIf - - If Not GameState.hit - GameState.AddScore(500*GameState.level) - EndIf - - If start_bonus - GameState.AddScore(start_bonus) - EndIf - - If GameState.bonus_timer - bonus:+GameState.bonus_timer - bt=GameState.bonus_timer - EndIf - - GameState.bonus_timer=0 - - While timer And Not KeyHit(KEY_ESCAPE) - Cls() - ResetCollisions() - - GameState.ShieldShip() - - Backdrop.Draw() - Particles.Draw() - Trail.Draw() - - GameState.Control() - GameState.Move() - - SetRotation(GameState.ang) - - If GameState.shield - SetColor(Rand(0,255),Rand(0,255),Rand(0,255)) - Else - SetColor(255,255,255) - EndIf - - DrawImage(GFX.ship,GameState.x,GameState.y) - SetRotation(0) - - GFX.font.Centre("LEVEL " + GameState.level + " COMPLETED!",200,255,255,0) - - GFX.font.Centre("BONUS " + Number.Format(added) + "!!!",400,255,255,0) - - If bt - GFX.font.Centre("TIMER BONUS " + bt + "!!!",420,255,255,0) - EndIf - - Local y:Int=440 - - If Not GameState.hit - GFX.font.Centre("PERFECT BONUS " + (500*GameState.level) + "!!!",y,255,255,0) - y:+20 - EndIf - - If start_bonus - GFX.font.Centre("STARTING LEVEL BONUS " + start_bonus + "!!!",y,255,255,0) - y:+20 - EndIf - - If GameState.gonads - GFX.font.Centre("SECRET GONADS OF STEEL BONUS " + (9999+(GameState.level-1)*10000) + "!!!",y,255,255,0) - y:+20 - EndIf - - If added90 - Local x:Int=Rand(0,800) - Local y:Int=Rand(0,600) - Particles.AddScaledImage(GFX.fireball,x,y,0.1) - End If - End Rem - - Backdrop.Draw() - Particles.Draw() - Scroller.Draw(560) - - SetColor(255,255,255) - DrawImage(GFX.title,0,0) - - If defkey>0 - - If defkey=5 - GFX.font.Centre("PRESS A KEY TO GO BACK TO THE MENU",380) - Else - GFX.font.Centre("DEFINE KEYS",350) - GFX.font.Centre("PRESS ESCAPE TO CANCEL",380) - EndIf - - 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("THRUST",250,240,c3,c3,c3) - GFX.font.Draw("PAUSE",250,260,c4,c4,c4) - 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.kthrust),500,240,c3,c3,0) - GFX.font.Draw(KeySym(GameConfig.kpause),500,260,c4,c4,0) - - Local k:Int=-1 - - For Local f:Int=0 To 255 - If KeyHit(f) - k=f - Continue - EndIf - Next - - If k=KEY_ESCAPE - GameConfig.Load() - defkey=0 - FlushKeys() - ElseIf k<>-1 - Select defkey - Case 1 - GameConfig.kleft=k - Case 2 - GameConfig.kright=k - Case 3 - GameConfig.kthrust=k - Case 4 - GameConfig.kpause=k - End Select - - defkey:+1 - - If defkey=6 - GameConfig.Save() - defkey=0 - FlushKeys() - EndIf - EndIf - Else - If KeyHit(KEY_ESCAPE) - done=True - quit=True - EndIf - - If KeyHit(GameConfig.kthrust) - done=True - EndIf - - If KeyHit(KEY_R) - defkey=1 - FlushKeys() - EndIf - - If GameConfig.maxlevel>1 - If KeyHit(KEY_LEFT) Or KeyHit(KEY_DOWN) - start_level=start_level-1 - If start_level<1 - start_level=GameConfig.maxlevel - EndIf - ElseIf KeyHit(KEY_RIGHT) Or KeyHit(KEY_UP) - start_level=start_level+1 - If start_level>GameConfig.maxlevel - start_level=1 - EndIf - End If - EndIf - - GFX.font.Centre("COPYRIGHT (C) NODDYBOX 2006",200) - GFX.font.Centre("HTTP://WWW.NODDYBOX.CO.UK/",226) - - GFX.font.Centre("THANKS TO",300) - Thanks.Draw(326) - - GFX.font.Centre("PRESS " + KeySym(GameConfig.kthrust).ToUpper() + " TO PLAY",400) - - If GameConfig.maxlevel>1 - GFX.font.Centre("CURSORS TO SELECT STARTING LEVEL: "+start_level,450) - EndIf - - GFX.font.Centre("PRESS R TO REDEFINE KEYS",480) - GFX.font.Centre("PRESS ESCAPE TO QUIT",500) - EndIf - - If fade - If fade.Fade() - fade.Draw() - Else - fade=Null - EndIf - EndIf - - GameState.Display() - Flip(1) - Wend - - Particles.Clear() - TFadeScreen.DoFadeOut() -End Function +' Missile Lock +' +' Copyright (C) 2006 Ian Cowburn (ianc@noddybox.co.uk) +' +' This program is free software; you can redistribute it and/or modify +' it under the terms of the GNU General Public License as published by +' the Free Software Foundation; either version 2 of the License, or +' (at your option) any later version. +' +' This program is distributed in the hope that it will be useful, +' but WITHOUT ANY WARRANTY; without even the implied warranty of +' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +' GNU General Public License for more details. +' +' You should have received a copy of the GNU General Public License +' along with this program; if not, write to the Free Software +' Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +' +' ------------------------------------------------------------------------- +' +' $Id$ +' +Strict +Framework brl.basic +Import brl.max2d +Import brl.glmax2d +?Win32 +Import brl.d3d7max2d +? + +Import noddybox.bitmapfont +Import noddybox.keysyms +Import noddybox.showlicense + +Import "global.bmx" +Import "gametypes.bmx" +'Import "game.bmx" +Import "particle.bmx" +'Import "help.bmx" +Import "sound.bmx" + +Incbin "short_license.txt" +Incbin "license.txt" + +' =================================== +' Initialise +' =================================== +' +SeedRnd(MilliSecs()) + +?Win32 +If Switch("--directx") + SetGraphicsDriver D3D7Max2DDriver() +Else + SetGraphicsDriver GLMax2DDriver() +EndIf +? + +Graphics 800,600,32 +HideMouse + +SetBlend(ALPHABLEND) +SetAlpha(1.0) + + +' =================================== +' Globals +' =================================== +' +GFX.Init() ' MUST be first +SFX.Init() + +GameConfig.Load() + +If Not GameConfig.accepted + If Not ShowLicense("MISSILE LOCK -- LICENSE","incbin::short_license.txt","incbin::license.txt") + EndGraphics() + End + EndIf + GameConfig.accepted=True + GameConfig.Save() +EndIf + +Scroller.Init() +Thanks.Init() +Particles.Init() +Backdrop.Init() +Trail.Init() +MissileSet.Init() +AsteroidSet.Init() + +Global quit:Int=False +Global start_level:Int=1 + + +' =================================== +' Main +' =================================== +' +Menu() + +FlushKeys() + +While Not quit + Local start_bonus:Int=1000*(start_level-1) + + GameState.Reset() + GameState.SetLevel(start_level) + MissileSet.StartLevel() + AsteroidSet.StartLevel() + + While Not GameState.game_over + + Local alert_timer:Int=200 + + SFX.Alert() + + While Not GameState.game_over And Not MissileSet.AllDestroyed() + Cls() + + If alert_timer + alert_timer:-1 + If alert_timer Mod 60 < 30 + GFX.font.Centre("RED ALERT!",300,255,0,0) + EndIf + EndIf + + ResetCollisions() + + Backdrop.Draw() + Particles.Draw() + Trail.Draw() + + GameState.Control() + GameState.Move() + + SetRotation(GameState.ang) + + If GameState.shield + SetColor(Rand(0,255),Rand(0,255),Rand(0,255)) + Else + SetColor(255,255,255) + EndIf + + DrawImage(GFX.ship,GameState.x,GameState.y) + SetRotation(0) + + MissileSet.Update() + AsteroidSet.Update() + + Local col:Object[]=CollideImage(GFX.ship,GameState.x,GameState.y,0,ALL_LAYERS,0) + + If Not GameState.shield Then + If col + GameState.ShieldDown() + Particles.AddExplosion(GameState.x,GameState.y) + For Local m:Missile=EachIn col + If m + MissileSet.RemoveMissile(m) + GameState.AddScore(1*GameState.level) + Exit + EndIf + Next + 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 + AsteroidSet.Nuke() + + Local bonus=100*GameState.level + Local added:Int=0 + Local timer:Int=Max(HERTZ*5,bonus/10+HERTZ*3) + Local bt:Int=0 + + If GameState.gonads + GameState.AddScore(9999+(GameState.level-1)*10000) + EndIf + + If Not GameState.hit + GameState.AddScore(500*GameState.level) + EndIf + + If start_bonus + GameState.AddScore(start_bonus) + EndIf + + If GameState.bonus_timer + bonus:+GameState.bonus_timer + bt=GameState.bonus_timer + EndIf + + GameState.bonus_timer=0 + + While timer And Not KeyHit(KEY_ESCAPE) + Cls() + ResetCollisions() + + GameState.ShieldShip() + + Backdrop.Draw() + Particles.Draw() + Trail.Draw() + + GameState.Control() + GameState.Move() + + SetRotation(GameState.ang) + + If GameState.shield + SetColor(Rand(0,255),Rand(0,255),Rand(0,255)) + Else + SetColor(255,255,255) + EndIf + + DrawImage(GFX.ship,GameState.x,GameState.y) + SetRotation(0) + + GFX.font.Centre("LEVEL " + GameState.level + " COMPLETED!",200,255,255,0) + + GFX.font.Centre("BONUS " + Number.Format(added) + "!!!",400,255,255,0) + + If bt + GFX.font.Centre("TIMER BONUS " + bt + "!!!",420,255,255,0) + EndIf + + Local y:Int=440 + + If Not GameState.hit + GFX.font.Centre("PERFECT BONUS " + (500*GameState.level) + "!!!",y,255,255,0) + y:+20 + EndIf + + If start_bonus + GFX.font.Centre("STARTING LEVEL BONUS " + start_bonus + "!!!",y,255,255,0) + y:+20 + EndIf + + If GameState.gonads + GFX.font.Centre("SECRET GONADS OF STEEL BONUS " + (9999+(GameState.level-1)*10000) + "!!!",y,255,255,0) + y:+20 + EndIf + + If added90 + Local x:Int=Rand(0,800) + Local y:Int=Rand(0,600) + Particles.AddScaledImage(GFX.fireball,x,y,0.1) + End If + End Rem + + Backdrop.Draw() + Particles.Draw() + Scroller.Draw(560) + + SetColor(255,255,255) + DrawImage(GFX.title,0,0) + + If defkey>0 + + If defkey=5 + GFX.font.Centre("PRESS A KEY TO GO BACK TO THE MENU",380) + Else + GFX.font.Centre("DEFINE KEYS",350) + GFX.font.Centre("PRESS ESCAPE TO CANCEL",380) + EndIf + + 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("THRUST",250,240,c3,c3,c3) + GFX.font.Draw("PAUSE",250,260,c4,c4,c4) + 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.kthrust),500,240,c3,c3,0) + GFX.font.Draw(KeySym(GameConfig.kpause),500,260,c4,c4,0) + + Local k:Int=-1 + + For Local f:Int=0 To 255 + If KeyHit(f) + k=f + Continue + EndIf + Next + + If k=KEY_ESCAPE + GameConfig.Load() + defkey=0 + FlushKeys() + ElseIf k<>-1 + Select defkey + Case 1 + GameConfig.kleft=k + Case 2 + GameConfig.kright=k + Case 3 + GameConfig.kthrust=k + Case 4 + GameConfig.kpause=k + End Select + + defkey:+1 + + If defkey=6 + GameConfig.Save() + defkey=0 + FlushKeys() + EndIf + EndIf + Else + If KeyHit(KEY_ESCAPE) + done=True + quit=True + EndIf + + If KeyHit(GameConfig.kthrust) + done=True + EndIf + + If KeyHit(KEY_R) + defkey=1 + FlushKeys() + EndIf + + If GameConfig.maxlevel>1 + If KeyHit(KEY_LEFT) Or KeyHit(KEY_DOWN) + start_level=start_level-1 + If start_level<1 + start_level=GameConfig.maxlevel + EndIf + ElseIf KeyHit(KEY_RIGHT) Or KeyHit(KEY_UP) + start_level=start_level+1 + If start_level>GameConfig.maxlevel + start_level=1 + EndIf + End If + EndIf + + GFX.font.Centre("COPYRIGHT (C) NODDYBOX 2006",200) + GFX.font.Centre("HTTP://WWW.NODDYBOX.CO.UK/",226) + + GFX.font.Centre("THANKS TO",300) + Thanks.Draw(326) + + GFX.font.Centre("PRESS " + KeySym(GameConfig.kthrust).ToUpper() + " TO PLAY",400) + + If GameConfig.maxlevel>1 + GFX.font.Centre("CURSORS TO SELECT STARTING LEVEL: "+start_level,450) + EndIf + + GFX.font.Centre("PRESS R TO REDEFINE KEYS",480) + GFX.font.Centre("PRESS ESCAPE TO QUIT",500) + EndIf + + If fade + If fade.Fade() + fade.Draw() + Else + fade=Null + EndIf + EndIf + + GameState.Display() + Flip(-1) + Wend + + Particles.Clear() + TFadeScreen.DoFadeOut() +End Function -- cgit v1.2.3