' Hardwire ' ' Copyright 2005 Ian Cowburn ' ' $Id$ ' Strict Import noddybox.bitmapfont Import noddybox.keysyms Import noddybox.gfxmenu Import "types.bmx" Import "gametypes.bmx" Import "game.bmx" Import "particle.bmx" Rem TWire.Init() For Local t:Int=TWire.CROSS To TWire.BOTTOM_RIGHT Local w:TWire=TWire.Create(t) For Local d:Int=TWire.DIR_NONE To TWire.DIR_LEFT Print TWire.typename[t] + ": " + TWire.dirname[d] + " -> " + TWire.dirname[w.Traverse(d)] Next Next End EndRem ' =================================== ' 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 ' =================================== ' GameGFX.Init() Lookup.Init() GameConfig.Load() TWire.Init() Particles.Init() TextParticles.Init() Sound.Init() Global bdrop:TMenuBdrop=New TMenuBdrop Global quit:Int=False ' =================================== ' Main ' =================================== ' Menu() While Not quit Local game:TGame=New TGame game.SetInitLevel(GameConfig.start_level) While game.Play() Wend Menu() Wend EndGraphics End ' =================================== ' Argument Routines ' =================================== ' Function Switch:Int(s:String) For Local a:String=EachIn AppArgs If a=s Return True EndIf Next Return False End Function ' =================================== ' Menu Routines ' =================================== ' Function Menu() Const MENU_PLAY:Int=1 Const MENU_QUIT:Int=2 Const MENU_SCORES:Int=3 Const MENU_KEYS:Int=4 Const MENU_LEFT:Int=5 Const MENU_RIGHT:Int=6 Local done:Int=False Local menu:TGfxMenu=TGfxMenu.Create(200,0,0,255,255,255,25,bdrop,1) Local sel:Int Local defkey:Int=0 Local x1:Int=GraphicsWidth()/3-ImageWidth(GameGFX.play_button)/2 Local x2:Int=GraphicsWidth()/3*2-ImageWidth(GameGFX.play_button)/2 menu.Add(x1,150,GameGFX.play_button,MENU_PLAY) menu.Add(x2,150,GameGFX.scores_button,MENU_SCORES) menu.Add(x1,250,GameGFX.keys_button,MENU_KEYS) menu.Add(x2,250,GameGFX.quit_button,MENU_QUIT) menu.Add(x1,350,GameGFX.left_button,MENU_LEFT) menu.Add(x2+ImageWidth(GameGFX.play_button)-ImageWidth(GameGFX.right_button),350,GameGFX.right_button,MENU_RIGHT) Local tx1:Int=(GraphicsWidth()-GameGFX.large.TextWidth("START LEVEL 1"))/2 Local tx2:Int=tx1+GameGFX.large.TextWidth("START LEVEL ") While Not done Cls DrawImage(GameGFX.title,0,0) sel=menu.Render(defkey>0) If defkey>0 If defkey=7 GameGFX.large.Centre("PRESS A KEY TO GO BACK TO THE MENU",150) Else GameGFX.large.Centre("DEFINE KEYS",150) GameGFX.large.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) Local c5:Int=128+128*(defkey=5) Local c6:Int=128+128*(defkey=6) GameGFX.large.Draw("Left",250,180,c1,c1,0) GameGFX.large.Draw("Right",250,210,c2,c2,0) GameGFX.large.Draw("Rotate Right",250,240,c3,c3,0) GameGFX.large.Draw("Rotate Left",250,270,c4,c4,0) GameGFX.large.Draw("Drop",250,300,c5,c5,0) GameGFX.large.Draw("Pause",250,330,c6,c6,0) GameGFX.large.Draw(KeySym(GameConfig.kleft),500,180,c1,c1,0) GameGFX.large.Draw(KeySym(GameConfig.kright),500,210,c2,c2,0) GameGFX.large.Draw(KeySym(GameConfig.krotright),500,240,c3,c3,0) GameGFX.large.Draw(KeySym(GameConfig.krotleft),500,270,c4,c4,0) GameGFX.large.Draw(KeySym(GameConfig.kdrop),500,300,c5,c5,0) GameGFX.large.Draw(KeySym(GameConfig.kpause),500,330,c6,c6,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.krotright=k Case 4 GameConfig.krotleft=k Case 5 GameConfig.kdrop=k Case 6 GameConfig.kpause=k End Select defkey:+1 If defkey=7 GameConfig.Save() defkey=0 FlushKeys() EndIf EndIf Else If KeyHit(KEY_ESCAPE) done=True quit=True EndIf GameGFX.large.Draw("START LEVEL ",tx1,356) GameGFX.large.Draw(GameConfig.start_level,tx2,356,255,255,0) EndIf Select sel Case MENU_PLAY done=True FlushKeys() Case MENU_SCORES FlushKeys() Case MENU_KEYS FlushKeys() defkey=1 Case MENU_QUIT done=True quit=True Case MENU_LEFT GameConfig.start_level=Max(1,GameConfig.start_level-1) GameConfig.Save() Case MENU_RIGHT GameConfig.start_level=Min(10,GameConfig.start_level+1) GameConfig.Save() End Select Rem SetScale(2,2) GameGFX.font.Centre("HARDWIRE",0,255,255,0) SetScale(1,1) GameGFX.font.Centre("Copyright (c) 2005 Ian C",20,255,0,0) EndRem SetColor(255,255,255) DrawImage(GameGFX.pointer,MouseX(),MouseY()) Flip Wend End Function