Commit 841d64aa authored by Mike Wiering's avatar Mike Wiering
Browse files

Worms demo added

parent a0131e23
@echo off
if (%2)==() goto error
..\bin\makedx %1
..\bin\map2icl %1 %2
copy %1.bmp ..\*.bmp
del %1.bmp
copy %1.dcl ..\*.dcl
del %1.dcl
copy %1.icl ..\*.icl
del %1.icl
goto end
:error
echo usage: conv levelfile identifier
:end
@..\bin\edlev %1 %2 %3 %4
\ No newline at end of file
@..\bin\gred %1 %2 %3 %4
\ No newline at end of file
definition module HEAD
import StdEnv, StdGameDef
HeadBitmap :: GameBitmap
HeadMap :: [{#Int}]
HeadSeq001 :: (Int, [(Int, Int)])
HeadSequences :: [(Int, [(Int, Int)])]
implementation module HEAD
import StdEnv, StdGameDef
HeadBitmap :: GameBitmap
HeadBitmap
= { bitmapname = "HEAD.BMP"
, unitsize = { w = 28, h = 28 }
, dimensions = (11, 1)
, transparent = Just { x = 139, y = 27 }
}
HeadMap :: [{#Int}]
HeadMap = [{1,2,3,4,5,-1,-1},
{-1,-1,-1,-1,-1,-1,-1},
{-1,-1,-1,-1,-1,-1,-1},
{-1,-1,-1,-1,-1,-1,-1}]
HeadSeq001 :: (Int, [(Int, Int)])
HeadSeq001 = (-1,[])
HeadSequences :: [(Int, [(Int, Int)])]
HeadSequences = [HeadSeq001]
\ No newline at end of file
definition module L1
import StdEnv, StdGameDef
Level1Bitmap :: GameBitmap
Level1Map :: [{#Int}]
Level1Bounds :: [{#Int}]
implementation module L1
import StdEnv, StdGameDef
Level1Bitmap :: GameBitmap
Level1Bitmap
= { bitmapname = "L1.BMP"
, unitsize = { w = 24, h = 24 }
, dimensions = (13, 2)
, transparent = Nothing
}
Level1Map :: [{#Int}]
Level1Map = [{1,2,3,3,4,3,5,2,5,3,5,3,4,3,5,5,3,4,5,3,2,3,5,4,3,3,2,1},
{1,3,6,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,8,3,1},
{1,3,9,10,11,11,10,10,11,11,10,10,11,11,10,10,11,11,10,10,11,11,10,10,
11,12,3,1},
{1,4,9,11,10,10,11,11,10,10,11,11,10,10,11,11,10,10,11,11,10,10,11,11,
10,12,4,1},
{1,3,9,11,10,10,11,11,10,10,11,11,10,10,11,11,10,10,11,11,10,10,11,11,
10,12,3,1},
{1,5,9,10,11,11,10,10,11,11,10,10,11,11,10,10,11,11,10,10,11,11,10,10,
11,12,5,1},
{1,2,9,10,11,11,10,10,11,11,10,10,11,11,10,10,11,11,10,10,11,11,10,10,
11,12,2,1},
{1,5,9,11,10,10,11,11,10,10,11,11,10,10,11,11,10,10,11,11,10,10,11,11,
10,12,5,1},
{1,3,9,11,10,10,11,11,10,10,11,11,10,10,11,11,10,10,11,11,10,10,11,11,
10,12,3,1},
{1,4,9,10,11,11,10,10,11,11,10,10,11,11,10,10,11,11,10,10,11,11,10,10,
11,12,4,1},
{1,3,9,10,11,11,10,10,11,11,10,10,11,11,10,10,11,11,10,10,11,11,10,10,
11,12,3,1},
{1,5,9,11,10,10,11,11,10,10,11,11,10,10,11,11,10,10,11,11,10,10,11,11,
10,12,5,1},
{1,2,9,11,10,10,11,11,10,10,11,11,10,10,11,11,10,10,11,11,10,10,11,11,
10,12,4,1},
{1,3,9,10,11,11,10,10,11,11,10,10,11,11,10,10,11,11,10,10,11,11,10,10,
11,12,3,1},
{1,4,9,10,11,11,10,10,11,11,10,10,11,11,10,10,11,11,10,10,11,11,10,10,
11,12,4,1},
{1,3,9,11,10,10,11,11,10,10,11,11,10,10,11,11,10,10,11,11,10,10,11,11,
10,12,3,1},
{1,4,9,11,10,10,11,11,10,10,11,11,10,10,11,11,10,10,11,11,10,10,11,11,
10,12,4,1},
{1,3,9,10,11,11,10,10,11,11,10,10,11,11,10,10,11,11,10,10,11,11,10,10,
11,12,3,1},
{1,3,13,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,
14,15,3,1},
{1,4,3,3,4,3,5,5,2,3,5,3,2,3,3,4,3,5,2,5,3,5,3,4,3,3,4,1}]
Level1Bounds :: [{#Int}]
Level1Bounds = [{15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,
15,15,15,15,15,15,15,15},
{15,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,15},
{15,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,15},
{15,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,15},
{15,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,15},
{15,15,0,0,0,0,0,0,0,4096,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,15},
{15,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,15},
{15,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,15},
{15,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,15},
{15,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,15},
{15,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,15},
{15,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,15},
{15,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,15},
{15,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,15},
{15,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,15},
{15,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,15},
{15,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,15},
{15,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,15},
{15,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,15},
{15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,
15,15,15,15}]
definition module L2
import StdEnv, StdGameDef
Level2Bitmap :: GameBitmap
Level2Map :: [{#Int}]
Level2Bounds :: [{#Int}]
implementation module L2
import StdEnv, StdGameDef
Level2Bitmap :: GameBitmap
Level2Bitmap
= { bitmapname = "L2.BMP"
, unitsize = { w = 24, h = 24 }
, dimensions = (13, 2)
, transparent = Nothing
}
Level2Map :: [{#Int}]
Level2Map = [{1,2,3,3,4,3,5,2,5,3,5,3,4,3,5,5,3,4,5,3,2,3,5,4,3,3,2,1},
{1,3,6,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,8,3,1},
{1,3,9,10,11,11,10,10,11,11,10,10,11,11,10,10,11,11,10,10,11,11,10,10,
11,12,3,1},
{1,4,9,11,10,10,11,11,10,10,11,11,10,10,11,11,10,10,11,11,10,10,11,11,
10,12,4,1},
{1,3,9,11,10,10,11,11,10,10,11,11,10,10,11,11,10,10,11,11,10,10,11,11,
10,12,3,1},
{1,5,9,10,11,11,10,10,11,13,13,13,13,13,13,13,13,13,13,10,11,11,10,10,
11,12,5,1},
{1,2,9,10,11,11,10,10,12,3,5,4,2,3,5,4,3,2,3,9,11,11,10,10,11,12,2,1},
{1,5,9,11,10,10,11,11,10,7,7,7,7,7,7,7,7,7,7,11,10,10,11,11,10,12,5,1},
{1,3,9,11,10,10,11,11,10,10,11,11,10,10,11,11,10,10,11,11,10,10,11,11,
10,12,3,1},
{1,4,9,10,11,11,10,10,11,11,10,10,11,11,10,10,11,11,10,10,11,11,10,10,
11,12,4,1},
{1,3,9,10,11,11,10,10,11,11,10,10,11,11,10,10,11,11,10,10,11,11,10,10,
11,12,3,1},
{1,5,9,11,10,10,11,11,10,10,11,11,10,10,11,11,10,10,11,11,10,10,11,11,
10,12,5,1},
{1,2,9,11,10,10,11,11,10,13,13,13,13,13,13,13,13,13,13,11,10,10,11,11,
10,12,4,1},
{1,3,9,10,11,11,10,10,12,3,2,5,3,4,3,5,2,5,3,9,11,11,10,10,11,12,3,1},
{1,14,9,10,11,11,10,10,11,7,7,7,7,7,7,7,7,7,7,10,11,11,10,10,11,12,4,1},
{1,3,9,11,10,10,11,11,10,10,11,11,10,10,11,11,10,10,11,11,10,10,11,11,
10,12,3,1},
{1,4,9,11,10,10,11,11,10,10,11,11,10,10,11,11,10,10,11,11,10,10,11,11,
10,12,4,1},
{1,3,9,10,11,11,10,10,11,11,10,10,11,11,10,10,11,11,10,10,11,11,10,10,
11,12,3,1},
{1,3,15,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
13,16,3,1},
{1,4,3,3,4,3,5,5,2,3,5,3,2,3,3,4,3,5,2,5,3,5,3,4,3,3,14,1}]
Level2Bounds :: [{#Int}]
Level2Bounds = [{15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,
15,15,15,15,15,15,15,15},
{15,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,15},
{15,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,15},
{15,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,15},
{15,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,15},
{15,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,15},
{15,15,0,0,0,0,0,0,0,32783,32783,32783,32783,32783,32783,32783,32783,
32783,32783,0,0,0,0,0,0,0,15,15},
{15,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,15},
{15,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,15},
{15,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,15},
{15,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,15},
{15,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,15},
{15,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,15},
{15,15,0,0,0,0,0,0,0,32783,32783,32783,32783,32783,32783,32783,32783,
32783,32783,0,0,0,0,0,0,0,15,15},
{15,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,15},
{15,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,15},
{15,15,0,0,0,0,0,0,0,4096,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,15},
{15,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,15},
{15,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,15},
{15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,
15,15,15,15}]
definition module L3
import StdEnv, StdGameDef
Level3Bitmap :: GameBitmap
Level3Map :: [{#Int}]
Level3Bounds :: [{#Int}]
implementation module L3
import StdEnv, StdGameDef
Level3Bitmap :: GameBitmap
Level3Bitmap
= { bitmapname = "L3.BMP"
, unitsize = { w = 24, h = 24 }
, dimensions = (13, 2)
, transparent = Nothing
}
Level3Map :: [{#Int}]
Level3Map = [{1,2,3,3,4,3,5,2,5,2,5,3,4,3,5,5,3,4,5,3,2,3,5,4,3,3,2,1},
{1,3,6,7,7,7,7,7,8,3,6,7,7,7,7,7,7,7,7,7,7,7,7,7,7,8,3,1},
{1,3,9,10,11,11,10,10,12,3,9,10,11,11,10,10,11,11,10,10,11,11,10,10,11,
12,3,1},
{1,4,9,11,10,10,11,11,12,4,9,11,10,10,11,11,10,10,11,11,10,10,11,11,10,
12,4,1},
{1,3,9,11,10,10,11,11,12,3,9,11,10,10,11,11,10,10,11,11,10,10,11,11,10,
12,3,1},
{1,5,9,10,11,11,10,10,12,5,9,10,11,11,10,10,11,11,10,10,11,11,10,10,11,
12,5,1},
{1,2,9,10,11,11,10,13,14,2,15,13,13,11,10,10,11,11,10,10,11,11,10,10,11,
12,2,1},
{1,5,9,11,10,10,12,2,5,4,3,3,2,9,11,11,10,10,11,11,10,10,11,11,10,12,
5,1},
{1,3,9,11,10,10,11,7,7,7,7,7,7,10,11,11,10,10,11,11,10,10,11,11,10,12,
3,1},
{1,4,9,10,11,11,10,10,11,11,10,10,11,11,10,10,11,11,10,10,11,11,10,10,
11,12,4,1},
{1,3,9,10,11,11,10,10,11,11,10,10,11,11,10,10,11,11,10,10,11,11,10,10,
11,12,3,1},
{1,5,9,11,10,10,11,11,10,10,11,11,10,10,11,13,13,13,13,13,13,10,11,11,
10,12,5,1},
{1,2,9,11,10,10,11,11,10,10,11,11,10,10,12,2,3,5,4,3,2,9,11,11,10,12,
4,1},
{1,3,9,10,11,11,10,10,11,11,10,10,11,11,10,7,7,8,2,6,7,11,10,10,11,12,
3,1},
{1,4,9,10,11,11,10,10,11,11,10,10,11,11,10,10,11,12,3,9,11,11,10,10,11,
12,4,1},
{1,3,9,11,10,10,11,11,10,10,11,11,10,10,11,11,10,12,3,9,10,10,11,11,10,
12,3,1},
{1,4,9,11,10,10,11,11,10,10,11,11,10,10,11,11,10,12,4,9,10,10,11,11,10,
12,4,1},
{1,3,9,10,11,11,10,10,11,11,10,10,11,11,10,10,11,12,3,9,11,11,10,10,11,
12,3,1},
{1,3,15,13,13,13,13,13,13,13,13,13,13,13,13,13,13,14,5,15,13,13,13,13,13,
14,3,1},
{1,4,3,3,4,3,5,5,2,3,5,3,2,3,3,4,3,5,2,5,3,5,3,4,3,3,4,1}]
Level3Bounds :: [{#Int}]
Level3Bounds = [{15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,
15,15,15,15,15,15,15,15},
{15,15,0,0,0,0,0,0,0,32783,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,15},
{15,15,0,0,0,0,0,0,0,32783,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,15},
{15,15,0,0,0,0,0,0,0,32783,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,15},
{15,15,0,0,0,0,0,0,0,32783,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,15},
{15,15,0,0,0,0,0,0,0,32783,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,15},
{15,15,0,0,0,0,0,0,0,32783,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,15},
{15,15,0,0,0,0,0,32783,32783,32783,32783,32783,32783,0,0,0,0,0,0,
0,0,0,0,0,0,0,15,15},
{15,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,15},
{15,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,15},
{15,15,0,0,0,0,0,0,4096,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,15},
{15,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,15},
{15,15,0,0,0,0,0,0,0,0,0,0,0,0,0,32783,32783,32783,32783,32783,32783,
0,0,0,0,0,15,15},
{15,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32783,0,0,0,0,0,0,0,15,15},
{15,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32783,0,0,0,0,0,0,0,15,15},
{15,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32783,0,0,0,0,0,0,0,15,15},
{15,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32783,0,0,0,0,0,0,0,15,15},
{15,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32783,0,0,0,0,0,0,0,15,15},
{15,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32783,0,0,0,0,0,0,0,15,15},
{15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,
15,15,15,15}]
definition module WORM
import StdEnv, StdGameDef
WormBitmap :: GameBitmap
WormMap :: [{#Int}]
WormSeq001 :: (Int, [(Int, Int)])
WormSequences :: [(Int, [(Int, Int)])]
implementation module WORM
import StdEnv, StdGameDef
WormBitmap :: GameBitmap
WormBitmap
= { bitmapname = "WORM.BMP"
, unitsize = { w = 24, h = 24 }
, dimensions = (13, 1)
, transparent = Just { x = 71, y = 23 }
}
WormMap :: [{#Int}]
WormMap = [{1,2,3,-1,-1,-1,-1,-1},
{-1,-1,-1,-1,-1,-1,-1,-1},
{-1,-1,-1,-1,-1,-1,-1,-1},
{-1,-1,-1,-1,-1,-1,-1,-1},
{-1,-1,-1,-1,-1,-1,-1,-1},
{-1,-1,-1,-1,-1,-1,-1,-1},
{-1,-1,-1,-1,-1,-1,-1,-1},
{-1,-1,-1,-1,-1,-1,-1,-1},
{-1,-1,-1,-1,-1,-1,-1,-1}]
WormSeq001 :: (Int, [(Int, Int)])
WormSeq001 = (-1,[])
WormSequences :: [(Int, [(Int, Int)])]
WormSequences = [WormSeq001]
\ No newline at end of file
module Worms
/*
Worms Demonstration Game for the Clean Game Library
Version: 2.0
Author: Mike Wiering (mike.wiering@cs.kun.nl)
*/
import StdEnv, StdIO
import StdGameDef, StdGame, StdGSt, GameFunctions
import L1, L2, L3, WORM, HEAD
import Random
:: GameState
= { curlevel :: !Int
, maxlevel :: !Int
, quit :: !Bool
, wormlist :: ![RealXY]
, gameover :: !Bool
, timecounter :: !Int
, randseed :: !RandomSeed
}
initialGameState = { curlevel = 0
, maxlevel = 7
, quit = False
, wormlist = []
, gameover = False
, timecounter = 0
, randseed = nullRandomSeed
}
/* move with speed V */
V = 3.0 /* 24 rem V must be 0 */
/* ---------- main program: load game definition and start the game! ---------- */
Start :: *World -> *World
Start world
# (seed, world) = getNewRandomSeed world
= startGame WormsDemo {initialGameState & randseed = seed}
[ScreenSize {w = 640, h = 480}, ColorDepth 16] world
/* ---------- the complete game definition ---------- */
WormsDemo :: (Game GameState)
WormsDemo =
{ levels = [ blankScreen
, GameLevel1
, blankScreen
, GameLevel2
, blankScreen
, GameLevel3
, blankScreen
]
, quitlevel = accGSt WormsQuitFunction
, nextlevel = accGSt WormsNextLevelFunction
, textitems = accGSt WormsTextItems
}
/* if the quit function returns true, the game engine quit the level */
WormsQuitFunction :: GameState -> (Bool, GameState)
WormsQuitFunction gst
= (gst.quit, gst)
/* function that returns the next level to run, 0 = end game */
WormsNextLevelFunction :: GameState -> (Int, GameState)
WormsNextLevelFunction gst =: {curlevel, maxlevel, gameover}
= (nextLevel, {gst & curlevel = nextLevel
, quit = False
, timecounter = (time nextLevel)
})
where
nextLevel = if (gameover || (curlevel + 1 > maxlevel)) 0 (curlevel + 1)
time l = if (l == maxlevel) 500 (if (l rem 2 == 1) 100 (~1))
/* function that returns text to be displayed */
WormsTextItems :: GameState -> ([GameText], GameState)
WormsTextItems gst =: {curlevel, gameover, timecounter, maxlevel}
# gst = {gst & timecounter = timecounter - 1}
| gst.timecounter == 0
= ([], {gst & quit = True})
| gameover
| timecounter < 0
= ([GameOver], {gst & timecounter = 250})
= ([GameOver], gst)
= if (curlevel == maxlevel)
([Ending1 timecounter, Ending2 timecounter], gst)
(if (curlevel rem 2 == 1)
([LevelStat ((curlevel + 1) / 2)], gst)
([], gst)
)
/* ---------- definitions of the levels ---------- */
/* block size */
W :== 24
H :== 24
DEFAULT_SIZE :== {w = W, h = H}
/* object codes (corresponds with level map) */
OBJ_START :== 0x10
OBJ_WORMHEAD :== 0x10
OBJ_WORMSEGMENT :== 0x11
OBJ_FOOD :== 0x12
OBJ_WALL :== 0x80
/* user events */
EV_STOP :== 0
EV_DIE :== 1
EV_GAMEOVER :== 2
/* ---------- level 1 ---------- */
GameLevel1
= { boundmap = { map = Level1Bounds
, blocksize = DEFAULT_SIZE
, objstart = OBJ_START
, startobjx =