summaryrefslogtreecommitdiff
path: root/types.bmx
diff options
context:
space:
mode:
Diffstat (limited to 'types.bmx')
-rw-r--r--types.bmx295
1 files changed, 295 insertions, 0 deletions
diff --git a/types.bmx b/types.bmx
new file mode 100644
index 0000000..62d08dd
--- /dev/null
+++ b/types.bmx
@@ -0,0 +1,295 @@
+' Hardwire
+'
+' Copyright 2005 Ian Cowburn
+'
+' $Id$
+'
+Strict
+Import noddybox.bitmapfont
+Import noddybox.gfxmenu
+
+
+' Included binaries
+'
+Incbin "GFX/font.bmf"
+Incbin "GFX/small.bmf"
+Incbin "GFX/large.bmf"
+Incbin "GFX/pointer.png"
+Incbin "GFX/play_button.png"
+Incbin "GFX/quit_button.png"
+Incbin "GFX/scores_button.png"
+Incbin "GFX/keys_button.png"
+Incbin "GFX/left_button.png"
+Incbin "GFX/right_button.png"
+Incbin "GFX/copper.png"
+Incbin "GFX/copperslice.png"
+Incbin "GFX/dust.png"
+Incbin "GFX/title.png"
+Incbin "GFX/cursor.png"
+
+Incbin "TILES/tile.png"
+Incbin "TILES/pit_top.png"
+Incbin "TILES/pit_bottomleft.png"
+Incbin "TILES/pit_bottomright.png"
+Incbin "TILES/pit_bottom.png"
+Incbin "TILES/pit_side.png"
+Incbin "TILES/trode_left.png"
+Incbin "TILES/trode_right.png"
+Incbin "TILES/trode_bottom.png"
+Incbin "TILES/top_bottom.png"
+Incbin "TILES/left_right.png"
+Incbin "TILES/cross.png"
+Incbin "TILES/top_left.png"
+Incbin "TILES/top_right.png"
+Incbin "TILES/bottom_left.png"
+Incbin "TILES/bottom_right.png"
+
+Type Lookup
+ Global si:Double[]
+ Global co:Double[]
+
+ Function Init()
+ si=New Double[360]
+ co=New Double[360]
+
+ For Local a:Int=0 To 359
+ si[a]=Sin(a)
+ co[a]=Cos(a)
+ Next
+ End Function
+End Type
+
+
+Type GameGFX
+ Global font:TBitmapFont
+ Global small:TBitmapFont
+ Global large:TBitmapFont
+
+ Global title:TImage
+
+ Global pointer:TImage
+ Global copper:TImage
+ Global copperslice:TImage
+ Global dust:TImage
+
+ Global play_button:TImage
+ Global quit_button:TImage
+ Global left_button:TImage
+ Global right_button:TImage
+ Global scores_button:TImage
+ Global keys_button:TImage
+
+ Global cursor:TImage
+ Global tile:TImage
+
+ Global pit_top:TImage
+ Global pit_bottomleft:TImage
+ Global pit_bottomright:TImage
+ Global pit_bottom:TImage
+ Global pit_side:TImage
+
+ Global trode_left:TImage
+ Global trode_right:TImage
+ Global trode_bottom:TImage
+
+ Global top_bottom:Timage
+ Global left_right:Timage
+ Global cross:Timage
+ Global top_left:Timage
+ Global top_right:Timage
+ Global bottom_left:Timage
+ Global bottom_right:Timage
+
+ Function Init()
+ font=TBitmapFont.Load("incbin::GFX/font.bmf",0)
+ small=TBitmapFont.Load("incbin::GFX/small.bmf",0)
+ large=TBitmapFont.Load("incbin::GFX/large.bmf",0)
+
+ title=LoadImage("incbin::GFX/title.png",0)
+
+ pointer=LoadImage("incbin::GFX/pointer.png",0)
+
+ copper=LoadImage("incbin::GFX/copper.png",0)
+ copperslice=LoadImage("incbin::GFX/copperslice.png",0)
+
+ dust=LoadImage("incbin::GFX/dust.png",FILTEREDIMAGE)
+ MidHandleImage(dust)
+
+ play_button=LoadImage("incbin::GFX/play_button.png",0)
+ quit_button=LoadImage("incbin::GFX/quit_button.png",0)
+ scores_button=LoadImage("incbin::GFX/scores_button.png",0)
+ keys_button=LoadImage("incbin::GFX/keys_button.png",0)
+ left_button=LoadImage("incbin::GFX/left_button.png",0)
+ right_button=LoadImage("incbin::GFX/right_button.png",0)
+
+ tile=LoadImage("incbin::TILES/tile.png",0)
+ cursor=LoadImage("incbin::GFX/cursor.png",0)
+
+ pit_top=LoadImage("incbin::TILES/pit_top.png",0)
+ pit_bottom=LoadImage("incbin::TILES/pit_bottom.png",0)
+ pit_bottomleft=LoadImage("incbin::TILES/pit_bottomleft.png",0)
+ pit_bottomright=LoadImage("incbin::TILES/pit_bottomright.png",0)
+ pit_side=LoadImage("incbin::TILES/pit_side.png",0)
+
+ trode_left=LoadImage("incbin::TILES/trode_left.png",0)
+ trode_right=LoadImage("incbin::TILES/trode_right.png",0)
+ trode_bottom=LoadImage("incbin::TILES/trode_bottom.png",0)
+
+ top_bottom=LoadImage("incbin::TILES/top_bottom.png",0)
+ left_right=LoadImage("incbin::TILES/left_right.png",0)
+ cross=LoadImage("incbin::TILES/cross.png",0)
+ top_left=LoadImage("incbin::TILES/top_left.png",0)
+ top_right=LoadImage("incbin::TILES/top_right.png",0)
+ bottom_left=LoadImage("incbin::TILES/bottom_left.png",0)
+ bottom_right=LoadImage("incbin::TILES/bottom_right.png",0)
+ End Function
+End Type
+
+Type GameConfig
+ Global kleft:Int
+ Global kright:Int
+ Global kup:Int
+ Global kdown:Int
+ Global krot:Int
+ Global kpause:Int
+ Global start_level:Int
+
+ Function Load()
+ Local s:TStream=ReadStream("hardwire.config")
+
+ If s=Null
+ kleft=KEY_LEFT
+ kright=KEY_RIGHT
+ kup=KEY_UP
+ kdown=KEY_DOWN
+ krot=KEY_SPACE
+ kpause=KEY_P
+ start_level=1
+ Return
+ EndIf
+
+ s=LittleEndianStream(s)
+
+ kleft=s.ReadInt()
+ kright=s.ReadInt()
+ kup=s.ReadInt()
+ kdown=s.ReadInt()
+ krot=s.ReadInt()
+ kpause=s.ReadInt()
+ start_level=s.ReadInt()
+
+ s.Close()
+ End Function
+
+ Function Save()
+ Local s:TStream=WriteStream("hardwire.config")
+
+ If s=Null
+ Return
+ EndIf
+
+ s=LittleEndianStream(s)
+
+ s.WriteInt(kleft)
+ s.WriteInt(kright)
+ s.WriteInt(kup)
+ s.WriteInt(kdown)
+ s.WriteInt(krot)
+ s.WriteInt(kpause)
+ s.WriteInt(start_level)
+
+ s.Close()
+ End Function
+EndType
+
+Type TEasyLink
+ Field l:TLink
+
+ Function Create:TEasyLink(l:TList)
+ Local o:TEasyLink=New TEasyLink
+ o.l=l.FirstLink()
+ Return o
+ End Function
+
+ Method Value:Object()
+ If l
+ Return l.Value()
+ Else
+ Return Null
+ EndIf
+ End Method
+
+ Method MoveNext()
+ If l
+ l=l.NextLink()
+ EndIf
+ End Method
+
+ Method Remove()
+ Local ol:TLink=l
+ MoveNext()
+ ol.Remove()
+ End Method
+End Type
+
+
+Type TMenuBdrop Extends TGfxMenuBackdrop
+ Const NUM:Int=2
+ Const SIZE:Double=50.0
+ Const OFFSET:Double=500.0
+ Field a:Int[NUM]
+ Field msg:String
+ Field msgp:Int
+ Field msgx:Int
+ Field msgy:Int
+
+ Method New()
+ For Local f:Int=0 Until NUM
+ a[f]=360/NUM*f
+ Next
+
+ msg=" "
+ msg:+"Welcome to Hardwire. The object of the game is to connect the electrodes around the side of the pit using "
+ msg:+"the wires embedded in the blocks. Once a circuit is completed those blocks are removed. Once in a while new blocks will fall from the sky. "
+ msg:+"If you let the pit overflow the game is over. That's all there is to it... "
+ msg:+"Hardwire was written using BlitzMax -- http://www.blitzbasic.com/ -- and a variety of tools available at "
+ msg:+"http://www.noddybox.demon.co.uk/ Please feel free to forward this game on to whoever you despise enough "
+ msg:+"to inflict this monstrosity upon. Enjoy."
+
+ msgx=0
+ msgp=0
+ msgy=OFFSET
+ End Method
+
+ Method Create:TGfxMenuBackdrop()
+ Return Self
+ End Method
+
+ Method Update()
+ For Local f:Int=0 Until NUM
+ a[f]=(a[f]+2) Mod 360
+
+ If a[f]<=180
+ Local c:Int=128-Abs(64*Lookup.si[a[f]])
+ SetColor(c,c,c)
+ DrawImage(GameGFX.copper,0,OFFSET+SIZE*Lookup.co[a[f]])
+ EndIf
+ Next
+
+ GameGFX.large.Draw(msg[..80],msgx,msgy)
+ msgx:-2
+ If msgx<-GameGFX.large.TextWidth(msg[0..1])
+ msgx:+GameGFX.large.TextWidth(msg[0..1])
+ msg=msg[1..]+msg[0..1]
+ EndIf
+
+ For Local f:Int=0 Until NUM
+ If a[f]>180
+ Local c:Int=128+Abs(64*Lookup.si[a[f]])
+ SetColor(c,c,c)
+ DrawImage(GameGFX.copper,0,OFFSET+SIZE*Lookup.co[a[f]])
+ EndIf
+ Next
+ SetColor(255,255,255)
+ End Method
+End Type