I've spent a few hours tinkering around with this 2d game engine and now I can't get it to run. I'm missing an endif somewhere and it won't compile, and after 45 minutes I can't find the damn thing.
I checked the debug, and it looks like it cut out after the gosub RESETCURSORPOS, but there's nothing in that section of code. 216 is the position of the loop, it would be great help if the compiler could somehow find the if statement without it's buddy endif.
PARSER ERROR
------------
Command out of place at line 216.
PROGRAM TRACE
-------------
RESETCURSORPOS:
position mouse 512,384
CURSORPOS(0).X=0
CU
ERROR TRACE
-----------
Failed to 'DoStatement(TokenID)'
Failed to 'pJumpBlockA->DoBlock'
Failed to 'DoStatement(TokenID)'
Failed to 'pLoopBlock->DoBlock()'
Failed to 'DoStatement(TokenID)'
Failed to 'DoBlock(0)'
Failed to 'MakeStatements'
Failed to Parse Program (MakeDBM->MakeProgram)'
I've been looking for over an hour. My eyes hurt and I'm going to bed. If you see the open if statement please tell me where! Thanks.
set display mode 1024,768,32
set window on
Sync On
Sync Rate 0
BACKDROP ON : COLOR BACKDROP RGB(0,0,0)
`player
load image "tiles\player\hangleft.png",1
load image "tiles\player\hangright.png",2
load image "tiles\player\jump.png",3
load image "tiles\player\jumpleft.png",4
load image "tiles\player\jumpright.png",5
load image "tiles\player\runleft.png",6
load image "tiles\player\runright.png",7
load image "tiles\player\stand.png",8
`walls
load image "tiles\ceiling\someceiling.png",9
load image "tiles\floor\grayfloor.png",10
load image "tiles\wall\somewall.png",11
`data
load image "tiles\cursor.png",12
`decor
load image "tiles\decal\vine.png",13
load image "tiles\decal\whiteflower.png",14
load image "tiles\decal\violetflower.png",15
load image "tiles\decal\pinkflower.png",16
`title
load image "tiles\temptitle.png",17
`30x18 room
TRANSPARENCY=1
type POSITION
X as float
Y as float
Z as float
T as integer
endtype
make object plain 1,1,1
set object collision off 1
texture object 1,12
set object transparency 1,TRANSPARENCY
dim MOUSEPOS(1) as POSITION
dim DELTAPOS(1) as POSITION
dim PROPOS(2) as POSITION `add additional dimensions to increase number available
dim CURSORPOS(0) as POSITION
CURSORSPEEDFACTOR#=.05
set ambient light 100
`initialize variables
Right=90
Left=270
Direction=Right
Jump=0
`room feature arrays
dim GrabLedge(100)
dim GrabLadder(100)
do
if LOAD1=0
if spacekey()=1
LOAD1=1
delete object 2
endif
if LOADEDTITLE=0
make object plane 2,10,10
texture object 2,17
position object 2,0,0,10
set object transparency 2,TRANSPARENCY
LOADEDTITLE=1
endif
endif
if LOAD1=1
gosub INTROLEVEL
if LOAD1=2 then gosub RESETCURSORPOS
endif
if LOAD1=2
`cursor
MOUSEPOS(1).X=mx
MOUSEPOS(1).Y=my
mx=mousex()
my=mousey()
gosub MOVECURSOR
if returnkey()=1 then gosub RESETCURSORPOS
position object 1,x#+CURSORPOS(0).X,y#+CURSORPOS(0).Y,z#-.25
gosub DEBUG
if timer()>FRTIMER
`save old values
oldx#=x#
oldy#=y#
rem Print whether the player is walking, jumping, falling or climbing
set cursor 0,0
if OnFloor=0
if Jump=0
print "Falling"
else
print "Jumping"
endif
endif
if OnFloor=1
print "On Foot"
endif
rem Control character
if upkey()=0
PressJump=0
endif
if upkey()=1 and Jump=0 and PressJump=0
if OnFloor>0
PressJump=1
Jump=50
endif
endif
if upkey()=1 and OnFloor=2 and PressJump=1
y#=y#+.5
endif
if upkey()=1 and Grab=1
Jump=40
Grab=0
endif
if upkey()=1 and OnFloor=0
Grab=0
TurnGrabBackOn=0
set object collision on GrabCollision
endif
if downkey()=1
Grab=0
set object collision off GrabCollision
TurnGrabBackOn=1
Jump=0
endif
if Jump>0
dec Jump
y#=y#+.5
endif
if rightkey()=1 and Grab=0
Direction=Right
x#=x#+.25
endif
if leftkey()=1 and Grab=0
Direction=Left
x#=x#-.25
endif
if Grab=0 then y#=y#-.25
if Direction=Right then GrabMod#=1.3
if Direction=Left then GrabMod#=-1.3
position object PlayerObject,x#,oldy#,z#
position object HeadCollision,x#,oldy#+3.7,z#
position object GrabCollision,x#+GrabMod#,oldy#+3.5,z#
`=============collision
if object collision(PlayerObject,0)>Projectile then dec x#,get object collision x()
position object PlayerObject,x#,y#,z#
position object HeadCollision,x#,y#+3.6,z#
position object GrabCollision,x#+GrabMod#,y#+3.4,z#
if object collision(HeadCollision,0)>Projectile then Jump=0
if object collision(GrabCollision,0)>GrabLedge(0) and object collision(GrabCollision,0)>GrabLedge(GC-1) and Jump=0 then Grab=1
if TurnGrabBackOn=1 then Grab=0
if object collision(PlayerObject,0)>Projectile
OnFloor=1
if y#<object position y(object collision(PlayerObject,0))
if upkey()=1
OnFloor=2
else
OnFloor=0
endif
endif
y#=oldy#
else
OnFloor=0
endif
`==========================
`FRAMERATE TIMER
FRTIMER=timer()+16
endif
`projectile system=========
if Direction=Left then ProjXmod#=-2
if Direction=Right then ProjXmod#=2
if FIRED=0
position object Projectile,x#+ProjXmod#,y#,z#
hide object Projectile
PROPOS(1).X=object position x(1)
PROPOS(1).Y=object position y(1)
PROPOS(1).Z=z#
point object Projectile,PROPOS(1).X,PROPOS(1).Y,PROPOS(1).Z
if mouseclick()=1
FIRED=1
show object Projectile
endif
endif
if FIRED=1
if PROJTIMER<TIMER()
move object Projectile,1
PROJTIMER=TIMER()+10
endif
if object collision(Projectile,0)>Projectile then FIRED=0
endif
`==========================
position object PlayerObject,x#,y#,z#
position object HeadCollision,x#,y#+3.7,z#
position object GrabCollision,x#+GrabMod#,y#+3.5,z#
position camera x#,y#,0
point camera x#,y#,z#
sync
loop
RESETCURSORPOS:
position mouse 512,384
CURSORPOS(0).X=0
CURSORPOS(0).Y=0
return
MOVECURSOR:
`change the rate for faster movements
MOUSEPOS(0).X=abs(MOUSEPOS(1).X-mx)
MOUSEPOS(0).Y=abs(MOUSEPOS(1).Y-my)
if MOUSEPOS(1).X>mx
DELTAPOS(1).X=DELTAPOS(1).X-CURSORSPEEDFACTOR#*MOUSEPOS(0).X
endif
if MOUSEPOS(1).X<mx
DELTAPOS(1).X=DELTAPOS(1).X+CURSORSPEEDFACTOR#*MOUSEPOS(0).X
endif
if MOUSEPOS(1).Y>my
DELTAPOS(1).Y=DELTAPOS(1).Y+CURSORSPEEDFACTOR#*MOUSEPOS(0).Y
endif
if MOUSEPOS(1).Y<my
DELTAPOS(1).Y=DELTAPOS(1).Y-CURSORSPEEDFACTOR#*MOUSEPOS(0).Y
endif
CURSORPOS(0).X=CURSORPOS(0).X+DELTAPOS(1).X
CURSORPOS(0).Y=CURSORPOS(0).Y+DELTAPOS(1).Y
DELTAPOS(1).X=0
DELTAPOS(1).Y=0
return
DEBUG:
text 0,0,"FPS: "+str$(screen fps())
text 0,10,"Pos X: "+str$(x#)
text 0,20,"Pos Y: "+str$(y#)
text 0,30,"Hit: "+str$(object collision(Projectile,0))
return
INTROLEVEL:
if LOADEDROOM1=0
LevelObject=2
`behind player
z#=31.5
for y=18 to 1 step -1
for x=1 to 30
read DecalData1
if DecalData1=1
make object plane LevelObject,3.2,3.2
texture object LevelObject,13
position object LevelObject,x*object size x(LevelObject),y*object size y(LevelObject),z#
set object transparency LevelObject,TRANSPARENCY
inc LevelObject
endif
if DecalData1=2
make object plane LevelObject,3.2,3.2
texture object LevelObject,14
position object LevelObject,x*object size x(LevelObject),y*object size y(LevelObject),z#
set object transparency LevelObject,TRANSPARENCY
inc LevelObject
endif
if DecalData1=3
make object plane LevelObject,3.2,3.2
texture object LevelObject,16
position object LevelObject,x*object size x(LevelObject),y*object size y(LevelObject),z#
set object transparency LevelObject,TRANSPARENCY
inc LevelObject
endif
if DecalData1=4
make object plane LevelObject,3.2,3.2
texture object LevelObject,15
position object LevelObject,x*object size x(LevelObject),y*object size y(LevelObject),z#
set object transparency LevelObject,TRANSPARENCY
inc LevelObject
endif
next x
next y
`in front of player
z#=32.5
for y=18 to 1 step -1
for x=1 to 30
read DecalData2
if DecalData2=1
make object plane LevelObject,3.2,3.2
texture object LevelObject,13
position object LevelObject,x*object size x(LevelObject),y*object size y(LevelObject),z#
set object transparency LevelObject,TRANSPARENCY
inc LevelObject
endif
if DecalData2=2
make object plane LevelObject,3.2,3.2
texture object LevelObject,14
position object LevelObject,x*object size x(LevelObject),y*object size y(LevelObject),z#
set object transparency LevelObject,TRANSPARENCY
inc LevelObject
endif
if DecalData2=3
make object plane LevelObject,3.2,3.2
texture object LevelObject,16
position object LevelObject,x*object size x(LevelObject),y*object size y(LevelObject),z#
set object transparency LevelObject,TRANSPARENCY
inc LevelObject
endif
if DecalData2=4
make object plane LevelObject,3.2,3.2
texture object LevelObject,15
position object LevelObject,x*object size x(LevelObject),y*object size y(LevelObject),z#
set object transparency LevelObject,TRANSPARENCY
inc LevelObject
endif
next x
next y
`player
z#=32
for y=18 to 1 step -1
for x=1 to 30
read PlayerData
if PlayerData=1
make object plane LevelObject,2.4,7.2
texture object LevelObject,8
make object collision box LevelObject,-1.2,-3.6,-1.6,1.2,3.6,1.6,0
set object collision on LevelObject
position object LevelObject,(x+1)*3.2,(y+1)*3.2,z#
PlayerObject=LevelObject
x#=object position x(PlayerObject)
y#=object position y(PlayerObject)
set object transparency LevelObject,TRANSPARENCY
inc LevelObject
`set a small collision box a bit above the player to turn jump negative when collided with
make object plane LevelObject,object size x(PlayerObject),.1
make object collision box LevelObject,-object size x(PlayerObject)/2,-.05,-.05,object size x(PlayerObject)/2,.05,.05,0
HeadCollision=LevelObject
inc LevelObject
`set a small collision box in front of the player to hang onto a ledge, and if hanging, up lifts the player up enough to move onto the ledge
make object plane LevelObject,.1,.1
make object collision box LevelObject,-.05,-.05,-.05,.05,.05,.05,0
GrabCollision=LevelObject
inc LevelObject
`set projectile
make object box LevelObject,.1,.1,.5
make object collision box LevelObject,-.2,-.2,-.25,.2,.2,.25,1
set object collision on LevelObject
Projectile=LevelObject
inc LevelObject
endif
next x
next y
`collision : collide if object collision(HeadCollision/PlayerObject/Projectile,0)> [Projectile] for shot/head collision, [Ledge] for grab, [Ladder] for ladder
for y=18 to 1 step -1
for x=1 to 30
read BasicCollision
if BasicCollision=1 `floor
make object plane LevelObject,3.2,3.2
texture object LevelObject,10
make object collision box LevelObject,-1.6,-1.6,-1.6,1.6,1.6,1.6,0
set object collision on LevelObject
z#=32
position object LevelObject,x*object size x(LevelObject),y*object size y(LevelObject),z#
set object transparency LevelObject,TRANSPARENCY
inc LevelObject
endif
if BasicCollision=2 `wall
make object plane LevelObject,3.2,3.2
texture object LevelObject,11
make object collision box LevelObject,-1.6,-1.6,-1.6,1.6,1.6,1.6,0
set object collision on LevelObject
z#=32
position object LevelObject,x*object size x(LevelObject),y*object size y(LevelObject),z#
set object transparency LevelObject,TRANSPARENCY
inc LevelObject
endif
if BasicCollision=3 `ceiling
make object plane LevelObject,3.2,3.2
texture object LevelObject,9
make object collision box LevelObject,-1.6,-1.6,-1.6,1.6,1.6,1.6,0
set object collision on LevelObject
z#=32
position object LevelObject,x*object size x(LevelObject),y*object size y(LevelObject),z#
set object transparency LevelObject,TRANSPARENCY
inc LevelObject
endif
if BasicCollision=4 `floor grab: set a small collision sprite on the top of ledge?
make object plane LevelObject,3.2,3.2
texture object LevelObject,10
make object collision box LevelObject,-1.6,-1.6,-1.6,1.6,1.6,1.6,0
set object collision on LevelObject
z#=32
position object LevelObject,x*object size x(LevelObject),y*object size y(LevelObject),z#
set object transparency LevelObject,TRANSPARENCY
GrabLedge(GC)=LevelObject
inc GC
inc LevelObject
endif
if BasicCollision=5 `wall grab: set a small collision sprite on the top of ledge?
make object plane LevelObject,3.2,3.2
texture object LevelObject,11
make object collision box LevelObject,-1.6,-1.6,-1.6,1.6,1.6,1.6,0
set object collision on LevelObject
z#=32
position object LevelObject,x*object size x(LevelObject),y*object size y(LevelObject),z#
set object transparency LevelObject,TRANSPARENCY
GrabLedge(GC)=LevelObject
inc GC
inc LevelObject
endif
if BasicCollision=6 `ladder grab: set a small collision sprite on the top of ledge?
make object plane LevelObject,3.2,3.2
texture object LevelObject,13
make object collision box LevelObject,-1.6,-1.6,-1.6,1.6,1.6,1.6,0
set object collision on LevelObject
z#=31.5
position object LevelObject,x*object size x(LevelObject),y*object size y(LevelObject),z#
GrabLadder(GL)=LevelObject
set object transparency LevelObject,TRANSPARENCY
inc GL
inc LevelObject
endif
next x
next y
LOADEDROOM1=1
LOAD1=2
endif
return
`create level
`organize data so that the collision geometry are dummy numbers in the rest of the data
PlayerData: `player start position/doors`
`1 is player start
data 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
data 0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
DecalData1: `non collision decal sprites behind player
`1 is vine
`2 is white
`3 is red
`4 is violet
data 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
data 0,0,2,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
data 0,0,1,0,0,0,0,0,1,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
data 0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
data 0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0
data 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0
data 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,1,0,0
data 0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0
data 0,1,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,1,0,1,0,0
data 0,1,2,0,0,0,0,0,0,1,3,0,0,0,0,0,0,0,0,0,0,0,0,1,2,1,0,1,0,0
data 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0
data 0,0,2,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,1,0,0
data 0,0,1,0,0,2,0,0,0,1,2,0,3,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0
data 0,0,1,0,0,1,0,0,0,1,1,0,1,0,0,0,0,0,4,0,0,0,0,0,0,1,0,1,0,0
data 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
DecalData2: `non collision decal sprites in front of player
`1 is vine
`2 is white
`3 is red
`4 is violet
data 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0,0,2,0,0,1,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,4,3,2,1,2,4,1,0,0,0,0,0,1,3,0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,2,0,0,0
data 0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0
data 0,4,1,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,1,0,0,0
data 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,1,0,0,0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,2,0,1,0,0,0,2,0,0,1,1,0,0,0,0,0,3,0,0,0,0,0
data 0,0,0,4,0,0,0,0,1,0,1,0,0,4,1,0,2,1,1,3,0,0,0,0,1,0,0,0,0,0
data 0,0,0,1,0,0,0,0,1,0,1,0,0,1,1,0,1,1,1,1,0,0,3,0,1,0,2,0,2,0
data 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
BasicCollision: `bland tiles, ledges, ladders
`0 is empty
`1 is floor
`2 is wall
`3 is ceiling
`4 is floor grab
`5 is wall grab
`6 is vine ladder
data 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3
data 2,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,2
data 2,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,2
data 2,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,2
data 2,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,2
data 2,0,0,0,0,0,0,0,4,1,1,1,1,1,1,1,4,0,4,1,1,1,1,1,0,0,0,0,0,2
data 2,1,1,4,0,0,0,0,3,3,3,3,3,3,3,3,3,0,3,3,3,3,3,3,4,0,0,0,0,2
data 2,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,0,0,0,0,3,0,0,0,0,2
data 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,0,0,0,0,0,0,0,0,5,2
data 2,0,0,0,0,5,0,6,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,2,2
data 2,0,0,0,0,2,0,6,0,0,0,0,1,1,1,1,1,1,2,0,0,0,0,0,0,0,0,0,2,2
data 2,0,0,0,2,2,0,6,0,0,0,0,2,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2
data 2,1,1,1,1,1,0,6,4,1,1,1,1,0,0,0,0,0,0,0,4,1,1,1,1,1,1,1,1,2
data 2,3,3,3,3,3,0,6,3,3,3,3,3,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,2
data 2,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,4,4,0,0,0,0,0,0,0,0,0,0,2
data 2,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2
data 2,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2
data 2,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2
data 2,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,2