I did submit an entry! (a couple of pages back) here it is again if you don't want to go searching...
Global CurrentLevel = 1
Global MaxLevels = 5
Setup_Screen()
Gosub _InitialiseGlobals
Get_Textures()
For Level = 1 To CurrentLevel
Read_Maze()
Next Level
Create_Maze()
LastTime = Timer()
Do
TimeLeft = TimeLeft - ((Timer()-LastTime)/1000)
If TimeLeft < 0 Then Player_Death()
If Object Collision(FinishObject, PlayerObject) = 1 Then Player_Win()
Ink RGB(255,255,255),0
Set Text Size 12
Text 0,0,"Lives: "+ str$(PlayerLives)
Text 0,20,"Time Left: "+str$(TimeLeft)
Handle_Bullets(1.5)
Handle_Bombs(.1)
Check_Wall_Collisions(2.0,0.25)
Move_Camera(.25)
LastTime = Timer()
Sync
loop
Function Next_Level()
Destroy_Level()
Undim Cube(0)
Read_Maze()
Create_Maze()
endfunction
Function Restart_Level()
Destroy_Level()
Create_Maze()
TimeLeft = DefaultTime
endfunction
Function Destroy_Level()
For z = 1 To MapHeight
For x = 1 To MapWidth
If Cube(x,z).Tile = 1 Then Delete Object Cube(x,z).Num
next x
next z
While Array Count(Bullets(0))> 0
Destroy_Bullet(1)
EndWhile
PlayerAng = 0
`Bombs
While Array Count(Bombs(0))<> 0
Destroy_Bomb(1)
EndWhile
BombCount = 120
Delete Object FloorObject
Delete Object CeilingObject
Delete Object FinishObject
Endfunction
Function Setup_Screen()
sync on: sync rate 60
autocam off `:Position Camera 15,5,15
Set ambient light 75
endfunction
_InitialiseGlobals:
`Textures And miscellaneous objects:
Global BrickImage As Integer
Global BombRed As Integer
Global BombGreen As Integer
Global FloorObject As Integer
Global FloorImage As Integer
Global CeilingObject As Integer
Global CeilingImage As Integer
Global FinishImage As Integer
Global FInishObject As Integer
`All of the map variables
Global MapWidth As Integer`: MapWidth = 10
Global MapHeight As Integer`: MapHeight = 10
Global Cubesize As Integer: CubeSize = 10
Type Object
X As Float: Y As Float: Z As Float
num As Integer
Tile As Integer
endtype
`Dim Cube(MapWidth,MapHeight) As Object
`Bullets
Type Bullet
X As Float: Y As Float: Z As Float
SX As Float: SY As Float: SZ As Float
num As Integer
endtype
Dim Bullets(0) As Bullet
Global BulletTimeout As Integer
`Stuff for moving the camera
Dim WallExist(4)
Global PlayerLives As Integer: PlayerLives = 3
Global PlayerX As Float: Global PlayerY As Float: Global PlayerZ As Float
Global PlayerAng As Float: PlayerAng = Camera angle Y()
Global TimeLeft As Float: Global lastTime As Float
Global DefaultTime As Float
Global PlayerObject As Integer
PlayerObject = Get_Free_Object_Number()
Make Object Cube PlayerObject, 5
Hide Object PlayerObject
`Bombs
Type Bomb
X As Float: Y As Float: Z As FLoat
Num As Integer
Active As Integer
Moving As Integer
DestinationX As Float
DestinationZ As Float
Endtype
Dim Bombs(0) As Bomb
Global BombCount As Integer: BombCount = 120
Return
_DimCube:
Dim Cube(MapWidth,MapHeight) As Object
Return
`-------------------------------------------------
`General Program Functions
`-------------------------------------------------
Function Get_Textures()
BrickImage = Get_Free_Image_Number()
BrickTexture(BrickImage)
BombRed = Get_Free_Image_Number()
BombTexture1(BombRed)
BombGreen = Get_Free_Image_Number()
BombTexture2(BombGreen)
FloorImage = Get_Free_Image_Number()
FloorTexture(FloorImage)
CeilingImage = Get_Free_Image_Number()
FloorTexture(CeilingImage)
FinishImage = Get_Free_Image_Number()
FinishTexture(FinishImage)
endfunction
Function Read_Maze()
Sync
Ink RGB(255,255,255),0
Set Text Size 12
cls 0
Read NumLevelText
For texts = 1 To NumLevelText
Read LevelText$
Print LevelText$
next texts
Sync: Wait Key
Read DefaultTime: TimeLeft = DefaultTime
Read MapWidth
Read MapHeight
Gosub _DimCube
For z = 1 To MapHeight
For x = 1 To MapWidth
Read Cube(x,z).Tile
Cube(x,z).X = (x-1)*Cubesize+(Cubesize/2)
Cube(x,z).Y = (Cubesize/2)
Cube(x,z).Z = (z-1)*Cubesize+(Cubesize/2)
next x
next z
endfunction
Function Create_Maze()
For z = 1 To MapHeight
For x = 1 To MapWidth
If Cube(x,z).Tile = 1 Then Make_Wall(x,z)
If Cube(x,z).Tile = 2 Then RePositionCamera(Cube(x,z).X, Cube(x,z).Y, Cube(x,z).Z)
If Cube(x,z).Tile = 3 Then Create_Bomb(0, Cube(x,z).X, Cube(x,z).Y, Cube(x,z).Z)
If Cube(x,z).Tile = 4 Then Create_Bomb(1, Cube(x,z).X, Cube(x,z).Y, Cube(x,z).Z)
If Cube(x,z).Tile = 10 Then Create_Finish(Cube(x,z).X, 2, Cube(x,z).Z)
next x
next z
`Object that will represent the floor
FloorObject = Get_Free_Object_Number()
Make Object Plain FloorObject, MapWidth*Cubesize, MapHeight*CubeSize
xrotate object FloorObject,90
Position Object FloorObject, (MapWidth*Cubesize)/2,0,(MapHeight*CubeSize)/2
Texture Object FloorObject, FloorImage
`Object that will represent the ceiling
CeilingObject = Get_Free_Object_Number()
Make Object Plain CeilingObject, MapWidth*Cubesize, MapHeight*CubeSize
xrotate object CeilingObject,90
Position Object CeilingObject, (MapWidth*Cubesize)/2,Cubesize,(MapHeight*CubeSize)/2
Texture Object CeilingObject,CeilingImage
EndFunction
Function Make_Wall(x,z)
Cube(x,z).num = Get_Free_Object_Number()
Make Object Cube Cube(x,z).num,Cubesize
Texture Object Cube(x,z).num,BrickImage
Position Object Cube(x,z).num, Cube(x,z).X, Cube(x,z).Y, Cube(x,z).Z
endfunction
`----------------------------------------------------
`Useful Code Snippets
`----------------------------------------------------
Function Get_Free_Object_Number()
Remstart
This function just finds a free object, and then returns its number.
This is so that objects can be given variable names rather than numbers!
***Special Thanks to Ric in the Darkbasic Pro forums who I stole this
function from.***
Remend
Do
inc ObjectNumber
If Object Exist(ObjectNumber) = 0 Then Exit
Loop
EndFunction ObjectNumber
Function Get_Free_Image_Number()
Remstart
This function just finds a free image, and then returns its number.
This is so that images can be given variable names rather than numbers!
***Special Thanks to Ric in the Darkbasic Pro forums who I stole this
function from.***
Remend
Do
inc ImageNumber
If Image Exist(ImageNumber) = 0 Then Exit
loop
endfunction ImageNumber
`----------------------------------------------------------
`Textures
`----------------------------------------------------------
Function BrickTexture(ImageNumber)
Ink Rgb(128,64,0),0
Box 0,0,64,64
Ink Rgb(0,0,0),0
For a = 0 To 7
Line 0,(a*8),64,(a*8)
next a
For x = 0 To 7
For y = 0 To 7
If (x+y) mod 2 = 0 Then Line (x*8),(y*8),(x*8),((y+1)*8)
next y
next x
Get Image Imagenumber, 0, 0, 64, 64
EndFunction
Function FloorTexture(ImageNumber)
Ink RGB(50,50,50),0
box 0,0,64,64
Get Image Imagenumber, 0, 0, 64, 64
endfunction
Function BombTexture1(ImageNumber)
Ink Rgb(200,50,50),0
Box 1,1,64,64
Get Image ImageNumber, 1, 1, 64, 64
endfunction
Function BombTexture2(ImageNumber)
Ink Rgb(50,200,50),0
Box 1,1,64,64
Get Image ImageNumber, 1, 1, 64, 64
endfunction
Function FinishTexture(ImageNumber)
Ink RGB(255,255,0),0
box 0,0,64,64
Get Image Imagenumber, 0, 0, 64, 64
endfunction
`-------------------------------------------
`Movement and Collision Functions
`-------------------------------------------
Function Check_Wall_Collisions(Buffer#,Speed#)
For direction = 1 To 4
WallExist(direction) = 0
next direction
For z = 1 To MapHeight
For x = 1 To MapWidth
If Cube(x,z).Tile = 1
If Abs((Cube(x,z).X-Buffer#-(Cubesize/2)-PlayerX)) < Speed# And Abs((Cube(x,z).Z)-PlayerZ)-Buffer# < (Cubesize/2) Then WallExist(1) = 1
If Abs((Cube(x,z).X+Buffer#+(Cubesize/2)-PlayerX)) < Speed# And Abs((Cube(x,z).Z)-PlayerZ)-Buffer# < (Cubesize/2) Then WallExist(3) = 1
If Abs((Cube(x,z).Z-Buffer#-(Cubesize/2)-PlayerZ)) < Speed# And Abs((Cube(x,z).X)-PlayerX)-Buffer# < (Cubesize/2) Then WallExist(2) = 1
If Abs((Cube(x,z).Z+Buffer#+(Cubesize/2)-PlayerZ)) < Speed# And Abs((Cube(x,z).X)-PlayerX)-Buffer# < (Cubesize/2) Then WallExist(4) = 1
endif
next x
next z
endfunction
Function RepositionCamera(X#,Y#,Z#)
Position Camera X#, Y#, Z#
PlayerX = Camera Position X(): PlayerY = Camera Position Y(): PlayerZ = Camera Position Z()
endfunction
Function Move_Camera(Speed#)
If Leftkey() = 1 Then PlayerAng = WrapValue(PlayerAng - Speed#*4.0)
If RightKey() = 1 Then PlayerAng = WrapValue(PlayerAng + Speed#*4.0)
If PlayerAng >= 0 AND PlayerAng <= 180
If WallExist(1) = 0 And Upkey() = 1 Then PlayerX = Newxvalue(PlayerX, PlayerAng, Speed#)
If WallExist(2) = 0 And ControlKey() = 1 Then PlayerZ = Newzvalue(PlayerZ, PlayerAng-90,speed#/2.0)
If WallExist(3) = 0 And Downkey() = 1 Then PlayerX = Newxvalue(PlayerX,PlayerAng,-Speed#)
If WallExist(4) = 0 And Keystate(82) = 1 Then PlayerZ = Newzvalue(PlayerZ, PlayerAng+90,speed#/2.0)
Endif
If PlayerAng >= 180 And PlayerAng <= 360
If WallExist(1) = 0 And Downkey() = 1 Then PlayerX = Newxvalue(PlayerX,PlayerAng,-Speed#)
If WallExist(2) = 0 And Keystate(82) = 1 Then PlayerZ = Newzvalue(PlayerZ, PlayerAng+90,speed#/2.0)
If WallExist(3) = 0 And Upkey() = 1 Then PlayerX = Newxvalue(PlayerX, PlayerAng, Speed#)
If WallExist(4) = 0 And ControlKey() = 1 Then PlayerZ = Newzvalue(PlayerZ, PlayerAng-90,speed#/2.0)
Endif
If PlayerAng >= 270 Or PlayerAng <= 90
If WallExist(3) = 0 And ControlKey() = 1 Then PlayerX = Newxvalue(Playerx, PlayerAng-90,speed#/2.0)
If WallExist(2) = 0 And Upkey() = 1 Then PlayerZ = Newzvalue(PlayerZ, PlayerAng, Speed#)
If WallExist(1) = 0 And Keystate(82) = 1 Then PlayerX = Newxvalue(Playerx, PlayerAng+90,speed#/2.0)
If WallExist(4) = 0 And Downkey() = 1 Then PlayerZ = Newzvalue(PlayerZ,PlayerAng,-Speed#)
Endif
If PlayerAng >= 90 And PlayerAng <= 270
If WallExist(4) = 0 And Upkey() = 1 Then PlayerZ = Newzvalue(PlayerZ, PlayerAng, Speed#)
If WallExist(1) = 0 And ControlKey() = 1 Then PlayerX = Newxvalue(Playerx, PlayerAng-90,speed#/2.0)
If WallExist(2) = 0 And Downkey() = 1 Then PlayerZ = Newzvalue(PlayerZ,PlayerAng,-Speed#)
If WallExist(3) = 0 And Keystate(82) = 1 Then PlayerX = Newxvalue(Playerx, PlayerAng+90,speed#/2.0)
Endif
Position Camera PlayerX, PlayerY, PlayerZ
Yrotate Camera PlayerAng
Position Object PlayerObject, PlayerX, PlayerY, PlayerZ
endfunction
`----------------------------------------------------------
`Bullet Functions
`----------------------------------------------------------
Function Make_bullet(Speed#)
If Array Count(Bullets(0)) = 100 Then Destroy_Bullet(1)
Add To Queue Bullets(0)
BNum = Array Count(Bullets(0))
Pick Screen MouseX(),MouseY(), Speed#
Bullets(BNum).SX = Get Pick Vector X()
Bullets(BNum).SY = Get Pick Vector Y()
Bullets(BNum).SZ = Get Pick Vector Z()
Bullets(BNum).X = Camera Position X()+Bullets(BNum).SX*2
Bullets(BNum).Y = Camera Position Y()+Bullets(BNum).SY*2
Bullets(BNum).Z = Camera Position Z()+Bullets(BNum).SZ*2
Bullets(BNum).Num = Get_Free_Object_Number()
Make Object Sphere Bullets(BNum).Num,1
Position Object Bullets(BNum).Num,Bullets(BNum).X, Bullets(BNum).Y, Bullets(BNum).Z
endfunction
Function Move_Bullets()
For tb = 1 To Array Count(Bullets(0))
Bullets(tb).X = Bullets(tb).X + Bullets(tb).SX
Bullets(tb).Y = Bullets(tb).Y + Bullets(tb).SY
Bullets(tb).Z = Bullets(tb).Z + Bullets(tb).SZ
Position Object Bullets(tb).Num,Bullets(tb).X, Bullets(tb).Y, Bullets(tb).Z
next tb
endfunction
Function Destroy_Bullet(BNum)
Delete Object Bullets(BNum).Num
Array Delete Element Bullets(0),BNum
endfunction
Function Handle_Bullets(Speed#)
If MouseClick() = 1 And BulletTimeout < 1
Make_Bullet(Speed#)
BulletTimeout = 30
Endif
If BulletTimeOut > 0 Then Dec BulletTimeout,1
Move_Bullets()
`Check if a bullet collides with a wall or a bomb
For tb = 1 To Array Count(Bullets(0))
If Object Position Y(Bullets(tb).Num) > CubeSize Or Object Position Y(Bullets(tb).Num) < 0
Destroy_Bullet(tb)
tb = tb - 1: If tb = 0 Then tb = 1: If tb > Array Count(Bullets(0)) Then Goto _HBExitLoop
endif
For z = 1 To MapHeight
For x = 1 To MapWidth
If Cube(x,z).Tile = 1
If Object Collision(Bullets(tb).Num, Cube(x,z).num) = 1
Destroy_Bullet(tb)
tb = tb - 1: If tb = 0 Then tb = 1: If tb > Array Count(Bullets(0)) Then Goto _HBExitLoop
Endif
Endif
next x
next z
For BNum = 1 To Array Count(Bombs())
If Object Collision(Bullets(tb).Num,Bombs(BNum).Num) = 1
If Bombs(Bnum).Active = 1 Then Player_Death(): ExitFunction
If Bombs(Bnum).Active = 2 Then Destroy_Bomb(BNum)
Destroy_Bullet(tb)
tb = tb - 1: If tb = 0 Then tb = 1: If tb > Array Count(Bullets(0)) Then Goto _HBExitLoop
endif
next bnum
_HBExitLoop:
next tb
Endfunction
`------------------------------------------
`Bomb Functions
`------------------------------------------
Function Create_Bomb(Moving, X#, Y#, Z#)
Add to queue Bombs(0)
BNum = Array Count(Bombs(0))
Bombs(BNum).X = X#
Bombs(BNum).Y = Y#
Bombs(BNum).Z = Z#
Bombs(BNum).Num = Get_Free_Object_Number()
Bombs(BNum).Active = RND(1)+1
Bombs(BNum).Moving = Moving
Bombs(BNum).DestinationX = X#
Bombs(BNum).DestinationZ = Z#
Make Object Sphere Bombs(BNum).Num,5
If Bombs(BNum).Active = 1 Then Texture Object Bombs(BNum).Num, BombRed
If Bombs(BNum).Active = 2 Then Texture Object Bombs(BNum).Num, BombGreen
Position Object Bombs(BNum).Num, Bombs(BNum).X, Bombs(BNum).Y, Bombs(BNum).Z
endfunction
Function Change_Bomb_States()
For b = 1 To Array Count(Bombs(0))
If RND(2) = 2 Then Bombs(b).Active = 2: Texture Object Bombs(b).Num, BombGreen
If RND(2) = 1 Then Bombs(b).Active = 1: Texture Object Bombs(b).Num, BombRed
next b
endfunction
Function Destroy_Bomb(BNum)
Delete Object Bombs(BNum).Num
Array Delete Element Bombs(0), BNum
endfunction
Function Handle_Bombs(Speed#)
If BombCount < 0
BombCount = 120
Change_Bomb_States()
Else
dec BombCount,1
Endif
For BNum = 1 TO Array Count(Bombs(0))
If Object Collision(PlayerObject, Bombs(BNum).Num) = 1 Then Player_Death(): ExitFunction
If Bombs(BNum).Moving = 1
If abs(Bombs(BNum).X-Bombs(BNum).DestinationX) < Speed# And abs(Bombs(BNum).Z-Bombs(BNum).DestinationZ) < Speed# Then ChooseBombDestination(BNum, Speed#)
If Bombs(BNum).X > Bombs(BNum).DestinationX Then Dec Bombs(BNum).X, Speed#
If Bombs(BNum).X < Bombs(BNum).DestinationX Then Inc Bombs(BNum).X, Speed#
If Bombs(BNum).Z > Bombs(BNum).DestinationZ Then Dec Bombs(BNum).Z, Speed#
If Bombs(BNum).Z < Bombs(BNum).DestinationZ Then Inc Bombs(BNum).Z, Speed#
Position Object Bombs(BNum).num, Bombs(BNum).X, Bombs(BNum).Y, Bombs(BNum).Z
endif
next bnum
endfunction
Function ChooseBombDestination(Bomb, Speed#)
BombSquareX = int(Bombs(Bomb).X/Cubesize) + 1
BombSquareZ = int(Bombs(Bomb).Z/Cubesize) + 1
Repeat
Direction = RND(4)
If Direction = 1 And Cube(BombSquareX-1, BombSquareZ).Tile <> 1 Then Dec Bombs(Bomb).DestinationX, 10
If Direction = 2 And Cube(BombSquareX, BombSquareZ+1).Tile <> 1 Then Inc Bombs(Bomb).DestinationZ, 10
If Direction = 3 And Cube(BombSquareX+1, BombSquareZ).Tile <> 1 Then Inc Bombs(Bomb).DestinationX, 10
If Direction = 4 And Cube(BombSquareX, BombSquareZ-1).Tile <> 1 Then Dec Bombs(Bomb).DestinationZ, 10
until abs(Bombs(Bomb).X-Bombs(Bomb).DestinationX) > Speed# Or abs(Bombs(Bomb).Z-Bombs(Bomb).DestinationZ) > Speed#
endfunction
`-------------------------------------------
`End Game Functions
`-------------------------------------------
Function Create_Finish(X#,Y#,Z#)
FinishObject = Get_Free_Object_Number()
Make Object Cube FinishObject, 4
Position Object FinishObject, X#, Y#, Z#
Texture Object FinishObject, FinishImage
endfunction
Function Player_Death()
Cls RGB(255,0,0)
Ink 0,0
Set Text Size 50
Center Text Screen Width()/2,(Screen Height()-50)/2,"KABOOOM!!!"
Sync
Wait Key
Dec PlayerLives, 1
If PlayerLives < 1 Then End
Restart_Level()
`End
endfunction
Function Player_Win()
Inc CurrentLevel, 1
If CurrentLevel > MaxLevels
Ink RGB(255,0,0),0
Set Text Size 40
Text 0,0,"CONGRATULATIONS!!!"
Text 0,50,"You have completed all of the levels!!!"
Sync
Wait Key
End
endif
Ink RGB(255,0,0),0
Set Text Size 40
Text 0,0,"Bomb Defused."
Sync: Wait Key
Next_Level()
endfunction
`Level 1
Data 21
Data "Training Level 1"
Data " "
Data "Greetings new recruit! I'm your commander, Mr. TinkleToes."
Data "To complete your training, You just have 2 more tests to do."
Data " "
Data "Here is your first test: See if you can diffuse a bomb."
Data "The bomb will be yellow. If you are able to get to it, you should"
Data "be able to diffuse it easily with the techniques you have already"
Data "learned. Take this seriously, because a bomb such as this could"
Data "destroy a city the size of London in the real world."
Data " "
Data "However, there is one small problem. A minor bomb is blocking your"
Data "way. This bomb will explode on impact. However, if it is green and you"
Data "use your specially formulated bomb destroying gun, you should be able"
Data "to destroy it. But if it is red, then the gun will not work, and you will"
Data "need to wait."
Data " "
Data "And another thing: The major yellow bomb will blow up in 20 seconds, so"
Data "It would be a good idea to diffuse it before then!"
Data " "
Data "Press any key to continue."
Data 20.0
Data 3,5
Data 1, 1, 1
Data 1, 2, 1
Data 1, 3, 1
Data 1,10, 1
Data 1, 1, 1
`Level 2
Data 9
Data "Training Level 2"
Data " "
Data "Congratulations on successfully completing the first training level."
Data " "
Data "It is now time for you to try something a little harder. In this training"
Data "level you will need to diffuse another bomb. This time, it is blocked"
Data "by a more advanced minor bomb that moves. Other than that, though,"
Data "everything about it should be the same. Just don't let it touch you, because"
Data "like all minor bombs it explodes on impact."
Data 20.0
Data 7, 7
Data 1, 1, 1, 1, 1, 1, 1
Data 1, 0, 0, 2, 0, 0, 1
Data 1, 0, 0, 0, 0, 0, 1
Data 1, 0, 0, 0, 0, 0, 1
Data 1, 0, 0, 4, 0, 0, 1
Data 1, 0, 0,10, 0, 0, 1
Data 1, 1, 1, 1, 1, 1, 1
`Level 3
Data 14
Data "Congratulations! You have completed all of the training levels!"
Data "You are now an official member of: The Super Cool and Extraordinary"
Data "Group of Super Heroes and Secret Agents who Protect Planet Earth from"
Data "Aliens, Evil Geniuses and Baddies. Or TSCAEGOSHAWPPEFAEGAB for short."
Data ""
Data "Anyways, we have just learned that Dr EvilPants has just planted a bomb"
Data "under New York city. Being an evil genius, he decided to put this bomb"
Data "inside a labyrinth. Our sensors have detected that there are no minor"
Data "bombs in this labyrinth, so you don't have to use your cool gun thingy,"
Data "but you will have to use your wits and labyrinth figuring out intellect"
Data "to find the bomb!"
Data ""
Data "Good Luck! Our scanners have also predicted that the bomb will blow up"
Data "in 2 minutes."
Data 120.0
Data 20,20
Data 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
Data 1, 2, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1
Data 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1
Data 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1
Data 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1
Data 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1
Data 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1
Data 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 1
Data 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1
Data 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1
Data 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1
Data 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1
Data 1, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1
Data 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1
Data 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1
Data 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1
Data 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1
Data 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
Data 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,10, 0
Data 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
`Level 4
Data 16
Data "Good job. You have successfully saved New York from destruction."
Data ""
Data "Well, now that we have a bit of spare time, let me tell you of the"
Data "secret sign of the TSCAEGOSHAWPPEFAEGAB. First, you need to turn"
Data "your head to the right, stick your tongue out, try to bite your ear,"
Data "while sing Marry Had A Little Lamb and karate chopping yourself in your"
Data "left arm using your right hand. Got it? Then it's time for your next"
Data "assignment!"
Data ""
Data "It looks like a group of aliens from the W.E.I.R.D. system have landed,"
Data "and are trying to blow up Tokyo. Don't ask why they want to. They just do."
Data "Anyways, these aliens are not very creative, but have a lot of firepower,"
Data "so you'll have to face a lot of bombs, but not a lot of walls. "
Data ""
Data "Oh, and these aliens use the metric system for bomb timers, so they count"
Data "in units of 100 seconds, not 60."
Data 100.0
Data 10,10
Data 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
Data 1, 2, 0, 4, 3, 0, 4, 0, 0, 1
Data 1, 0, 0, 0, 1, 1, 1, 1, 3, 1
Data 1, 0, 0, 0, 1, 0, 0, 0, 0, 1
Data 1, 4, 0, 4, 1, 0, 0, 0, 0, 1
Data 1, 3, 1, 1, 1, 0, 0, 0, 0, 1
Data 1, 0, 1, 0, 0, 0, 4, 4, 4, 1
Data 1, 4, 1, 0, 0, 0, 4, 3, 3, 1
Data 1, 0, 3, 0, 0, 0, 4, 3,10, 1
Data 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
`Level 5
Data 7
Data "Thanks to your good work, the aliens have gotten frustrated, and left to"
Data "attempt to blow up Pluto instead. "
Data ""
Data "It's now time for your hardest challenge yet. Dr. EvilPants has created"
Data "another labyrinth (this time packed with bombs) and is again threatening"
Data "to blow up New York. Stretch well, because you will have to do this in"
Data "under 5 minutes..."
Data 300.0
Data 20,20
Data 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
Data 1, 4, 0, 3, 0, 2, 0, 3, 0, 0, 1, 0, 3, 0, 0, 0, 0, 0, 0, 1
Data 1, 0, 0, 0, 1, 0, 1, 0, 4, 0, 1, 0, 1, 0, 4, 0, 4, 0, 0, 1
Data 1, 0, 0, 0, 1, 0, 1, 0, 4, 0, 1, 0, 1, 0, 4, 0, 4, 0, 0, 1
Data 1, 0, 0, 4, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1
Data 1, 0, 1, 1, 1, 3, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1
Data 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1
Data 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 4, 0, 1
Data 1, 0, 0, 0, 0, 0, 1, 3, 0, 4, 0, 4, 0, 1, 1, 1, 0, 4, 0, 1
Data 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1
Data 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1
Data 1, 4, 0, 1, 0, 4, 0, 0, 0, 1, 0, 4, 0, 0, 0, 0, 0, 1, 0, 1
Data 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1
Data 1, 0, 4, 3, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1
Data 1, 0, 4, 3, 0, 0, 1, 4, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1
Data 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 4, 0, 1, 1, 1, 3, 1, 1, 1
Data 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 4, 4, 4, 0, 1
Data 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 4, 3, 4, 0, 1
Data 1, 0, 4, 1, 0, 0, 4, 0, 0, 0, 0, 4, 0, 1, 0, 3,10, 3, 0, 1
Data 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
Arrow keys to move, "0"/control to "strafe", and click to shoot. The other stuff should be explained in the storyline. Also, if you want to start at a later level, just change the "currentlevel" variable at the top of the program (you still have to see all of the briefings, but you automatically win at the beggining of every level you skip)
Edit: And for all of you who are wondering, I was in kind of a weird mood when creating all of the levels, so that should explain the briefings...