I've been doing a bit more work with maths collision. It addresses some of the comments Latch made about reducing the number of collision calculations.
You can jump onto things, crouch and move under things, and walk up and down the stairs.
`Maths collision Demo
`By 29 Games
`16 Jun 2010
`this program is an FPS style demo
`controls: mouse to look, wasd to move and strafe, r to toggle run/walk, c to toggle crouch/stand, space to jump
`+++++ GLOBAL ARRAYS
dim blk#(1000,10) :`the vertex positions for the blocks that make up the map
dim blk_col(1000) :`colour of block, can also be used to hold an image number for a texture
dim ply_pos#(2,3) :`old and new x, y, z positions of player
dim ply_fac#(2) :`direction player is facing: left and right and up and down
dim table_data(20,20,20) :`array used to hold database information for map
`++++++ SET UP
gosub GENERAL_SET_UP
gosub CONSTANTS
gosub CREATE_MAP
gosub STARTING_VARIABLES
`++++++ MAIN LOOP
do
gosub PRINT_STUFF
gosub OTHER_CONTROLS
gosub MOVE_PLAYER
gosub PLACE_CAMERA
sync
loop
end
`+++++++++++++++++++++++++++++++++++++++++++++++++++
`++++++ SUB ROUTINES +++++++++++++++++++++++++++++++
`+++++++++++++++++++++++++++++++++++++++++++++++++++
GENERAL_SET_UP:
sync on
sync rate 65
hide mouse
set camera range 1, 3000
set ambient light 40
randomize timer()
cls
return
CONSTANTS:
`unit size of map
usi = 10
`maximum number of walls that make up the map
num_walls_max = 1000
num_blocks_max = 5
`number of squares in matrix
num_mtrx = 20
`height of walls
h# = usi*2
`player
`psiz# = player size as represented by a radius
`wspd# = walking speed, rspd# = running speed, mspd# = current forward movement speed, sspd# = strafe and back movement speed
`tspd# = turning speed, pspd# = pitching speed, jspd# = initial jump speed, step_up_spd# = like jump speed but for going up a step
`psht# = (standing height of player)/3
wspd# = 0.15
rspd# = 0.35
mspd# = wspd#
sspd# = wspd#
tspd# = 0.2
pspd# = 0.2
jspd# = 0.45
step_up_spd# = 0.125
psiz# = 1.5 :`note psiz# needs to be greater than 1.5, but needs to be scaled with movement so that camera does not go through a wall
psht# = 1.5 :`this is a value for when the player is standing. The actual height of the player is 3*psht#
pcht# = 0.75 :`this is a value for when the player is crouching. The actual height of the player is 3*pcht#
`gravity
grav# = 0.02
`size of database for map
num_rows = 20
num_cols = 20
num_items = 20
return
STARTING_VARIABLES:
`initial camera position and facing
ply_pos#(2,1) = usi*0.5
ply_pos#(2,2) = 0
ply_pos#(2,3) = usi*0.5
ply_fac#(1) = 0.0
ply_fac#(2) = 0.0
cur_jspd# = 0 :`current jump speed
cur_pht# = psht# :`current player height value
`flags
jump = 0 :`whether or not the player is jumping / falling
hit_surface = 0 :`whether or not the player has hit a top or bottom surface
return
OTHER_CONTROLS:
`press r to toggle walk or run
if run = 0
if keystate(19)=1
run = 1
if mspd# = rspd# then mspd# = wspd# else mspd# = rspd#
if sspd# = rspd# / 2 then sspd# = wspd# else sspd# = rspd# / 2
endif
endif
if keystate(19)=0 then run = 0
`press c to toggle standing and crouching
if crouch = 0
if keystate(46)=1
crouch = 1
if cur_pht# = psht# then cur_pht# = pcht# else cur_pht# = psht#
endif
endif
if keystate(46)=0 then crouch = 0
return
MOVE_PLAYER:
`save old position
ply_pos#(1,1) = ply_pos#(2,1)
ply_pos#(1,2) = ply_pos#(2,2)
ply_pos#(1,3) = ply_pos#(2,3)
`use mouse to look left, right, up and down
`rotate left and right
ply_fac#(1) = wrapvalue(ply_fac#(1) + mousemovex()*tspd#)
`pitch camera up and down
ply_fac#(2) = wrapvalue(ply_fac#(2) + mousemovey()*pspd#)
`this restricts the look up and down angle
campitchtest# = wrapvalue(ply_fac#(2)+180)
if campitchtest# < 90 then ply_fac#(2) = 270
if campitchtest# > 270 then ply_fac#(2) = 90
`w = forward, s = backward, a = strafe left, d = strafe right
`move forward
if keystate(17) = 1
ply_pos#(2,1) = newxvalue(ply_pos#(2,1), ply_fac#(1), mspd#)
ply_pos#(2,3) = newzvalue(ply_pos#(2,3), ply_fac#(1), mspd#)
endif
`move back
if keystate(31) = 1
ply_pos#(2,1) = newxvalue(ply_pos#(2,1), wrapvalue(ply_fac#(1)+180), sspd#)
ply_pos#(2,3) = newzvalue(ply_pos#(2,3), wrapvalue(ply_fac#(1)+180), sspd#)
endif
`strafe left
if keystate(30) = 1
ply_pos#(2,1) = newxvalue(ply_pos#(2,1), wrapvalue(ply_fac#(1)-90), sspd#)
ply_pos#(2,3) = newzvalue(ply_pos#(2,3), wrapvalue(ply_fac#(1)-90), sspd#)
endif
`strafe right
if keystate(32) = 1
ply_pos#(2,1) = newxvalue(ply_pos#(2,1), wrapvalue(ply_fac#(1)+90), sspd#)
ply_pos#(2,3) = newzvalue(ply_pos#(2,3), wrapvalue(ply_fac#(1)+90), sspd#)
endif
`jumping
`jump
if jump = 0 and cur_jspd# = 0
if spacekey()=1
jump = 1
cur_jspd# = jspd#
endif
endif
`jumping and falling
ply_pos#(2,2) = ply_pos#(2,2) + cur_jspd#
cur_jspd# = cur_jspd# - grav#
if cur_jspd# < -5.0 then cur_jspd# = -5.0 :`limit falling speed to -5
if ply_pos#(2,2) <= 0
jump = 0
ply_pos#(2,2) = 0
cur_jspd# = 0
endif
`collision detection sub routines
gosub COLLISION_WITH_MAP
return
PLACE_CAMERA:
yrotate camera ply_fac#(1)
xrotate camera ply_fac#(2)
position camera ply_pos#(2,1), ply_pos#(2,2)+2*cur_pht#, ply_pos#(2,3)
return
PRINT_STUFF:
set cursor 1,1: print "mouse to look, wasd to move and strafe, r to toggle run/walk, c to toggle crouch/stand, spacebar to jump"
set cursor 1,21: print "FPS : ", screen fps()
set cursor 1,41: print "number of blocks in map : ", num_blocks
set cursor 1,61: print "number of blocks checked for collision : ", col_calcs
return
COLLISION_WITH_MAP:
pcol = int(ply_pos#(2,1)/usi) + 1 :`column player is in
prow = int(ply_pos#(2,3)/usi) + 1 :`row player is in
i = 0
k = 0
`loop to check if there are any blocks to collide with in same square as player
repeat
inc k
`exit loop if square is empty (exit if datbase feild is equal to zero)
if table_data(pcol,prow,k) = 0
col_calcs = k - 1
exit
endif
i = table_data(pcol,prow,k)
gosub COLLISION_WITH_BLOCK
until k => num_items
return
COLLISION_WITH_BLOCK:
if ply_pos#(2,2) <= blk#(i,9) and ply_pos#(2,2)+3*cur_pht# > blk#(i,10)
if POINT_IN_ABCD(ply_pos#(2,1),ply_pos#(2,3), blk#(i,1),blk#(i,2), blk#(i,3),blk#(i,4), blk#(i,7),blk#(i,8), blk#(i,5),blk#(i,6)) = 1
gosub COLLIDE_WITH_TOP_OR_BOTTOM
else
if ply_pos#(2,2)+cur_pht# < blk#(i,9)
gosub COLLIDE_WITH_SIDE
endif
endif
endif
return
COLLIDE_WITH_TOP_OR_BOTTOM:
if ply_pos#(2,2)+cur_pht# > blk#(i,10)
`hit top surface
ply_pos#(2,2) = blk#(i,9)
cur_jspd# = 0
jump = 0
else
`hit bottom surface
ply_pos#(2,2) = blk#(i,10) - 3*(cur_pht#)
cur_jspd# = 0
endif
return
COLLIDE_WITH_SIDE:
for j = 1 to 7 step 2
sx = j
sz = j+1
ex = j+2
ez = j+3
if ex > 7 then ex = 1
if ez > 8 then ez = 2
`calculate the perpendicula intersect point with wall
pdx# = XD_ON_LINE(ply_pos#(2,1),ply_pos#(2,3), blk#(i,sx),blk#(i,sz),blk#(i,ex),blk#(i,ez))
pdz# = ZD_ON_LINE(ply_pos#(2,1),ply_pos#(2,3), blk#(i,sx),blk#(i,sz),blk#(i,ex),blk#(i,ez))
`calculate the distance from the point to the wall
u# = sqrt( (pdx# - ply_pos#(2,1))^2 + (pdz# - ply_pos#(2,3))^2 )
v# = V_ALONG_LINE(pdx#,pdz#, blk#(i,sx),blk#(i,sz),blk#(i,ex),blk#(i,ez))
`this calculates half the length of the line
h_len# = sqrt( (blk#(i,sx) - blk#(i,ex))^2 + (blk#(i,sz) - blk#(i,ez))^2 ) / 2
`smooth out step down
mod_psiz# = 2*(psiz#*(blk#(i,9)-ply_pos#(2,2)+cur_pht#)) / cur_pht#
if mod_psiz# < 0 then mod_psiz# = 0
if mod_psiz# > psiz# then mod_psiz# = psiz#
if u# <= mod_psiz# and v# <= h_len#
`calculate new coordinates if p in within wall boundary
pddx# = PDDX_FROM_POINT(ply_pos#(2,1),ply_pos#(2,3), pdx#,pdz#, mod_psiz#,u#)
pddz# = PDDZ_FROM_POINT(ply_pos#(2,1),ply_pos#(2,3), pdx#,pdz#, mod_psiz#,u#)
else
`calculate distance of p from the end point of the wall
ap# = sqrt( (ply_pos#(2,1) - blk#(i,sx))^2 + (ply_pos#(2,3) - blk#(i,sz))^2 )
if ap# <= psiz#
`calculate the new coordinates if the point is within the circle
pddx# = PDDX_FROM_POINT(ply_pos#(2,1),ply_pos#(2,3), blk#(i,sx),blk#(i,sz), mod_psiz#,ap#)
pddz# = PDDZ_FROM_POINT(ply_pos#(2,1),ply_pos#(2,3), blk#(i,sx),blk#(i,sz), mod_psiz#,ap#)
else
`this outcome if the point is not within the boundary of the line
pddx# = ply_pos#(2,1)
pddz# = ply_pos#(2,3)
endif
endif
ply_pos#(2,1) = pddx#
ply_pos#(2,3) = pddz#
next j
return
CREATE_MAP:
make matrix 1, usi*num_mtrx, usi*num_mtrx, num_mtrx, num_mtrx
`write map database to array
restore _map_database
for j = 1 to num_cols :`column
for i = 1 to num_rows :`row
for k = 1 to num_items :`item in row and column
read block_number
table_data(i,j,k) = block_number
next k
next i
next j
`write block data to array
restore _block_data
num_blocks = 0
repeat :`mesh numbers
read blk_col(num_blocks+1)
if blk_col(num_blocks+1) = 0 then exit
inc num_blocks
`write block data to array
for j = 1 to 10
read blk#(num_blocks,j)
blk#(num_blocks,j) = blk#(num_blocks,j)*usi
next j
until i = num_blocks_max
`create static objects of blocks
for i = 1 to num_blocks
MAKE_MESH_BLOCK_XZ(1, blk#(i,1),blk#(i,2), blk#(i,3),blk#(i,4), blk#(i,7),blk#(i,8), blk#(i,5),blk#(i,6), blk#(i,9),blk#(i,10))
make object 1,1,0
color object 1, blk_col(i)
make static object 1
delete object 1
delete mesh 1
next num_blocks
return
`+++++++++++++++++++++++++++++++++++++++++++++++++++
`++++++ FUNCTION +++++++++++++++++++++++++++++++++++
`+++++++++++++++++++++++++++++++++++++++++++++++++++
`++++++++++ MAKE MESHES FUNCTIONS ++++++++++++++++++
function MAKE_MESH_BLOCK_XZ(num, ax#,az#, bx#,bz#, cx#,cz#, dx#,dz#, ty#,uy#)
`a = front right, b = front left, c = back right, d = back left, t = top surface, u = underside
MAKE_MESH_8_POINTS(num, ax#,uy#,az#, bx#,uy#,bz#, ax#,ty#,az#, bx#,ty#,bz#, cx#,uy#,cz#, dx#,uy#,dz#, cx#,ty#,cz#, dx#,ty#,dz#)
endfunction
function MAKE_MESH_8_POINTS(num, ax#,ay#,az#, bx#,by#,bz#, cx#,cy#,cz#, dx#,dy#,dz#, ex#,ey#,ez#, fx#,fy#,fz#, gx#,gy#,gz#, hx#,hy#,hz#)
`a = front right bottom, b = front left bottom, c = front right top, d = front left top
`e = back right bottom, f = back left bottom, g = back right top, h = back left top
`there are six sides to a box
num_sides = 6
`memblock number
mem = 1
`header values
num_verts = num_sides * 4
pos_verts = 32
num_norms = num_verts
pos_norms = num_verts*12 + pos_verts
num_faces = num_sides*2
pos_faces = pos_norms + num_norms*12
size_faces = num_faces*7
pos_uv = pos_faces + size_faces*4
`calculate size of memblock
size_mem = 32 + (num_verts + num_norms)*12 + size_faces*4 + num_sides*32
`create the memblock
make memblock mem, size_mem
`write header values to memblock
write memblock dword mem, 0, num_verts
write memblock dword mem, 4, pos_verts
write memblock dword mem, 8, num_norms
write memblock dword mem, 12, pos_norms
write memblock dword mem, 16, num_faces
write memblock dword mem, 20, pos_faces
write memblock dword mem, 24, size_faces
write memblock dword mem, 28, pos_uv
`write vertext data to memblock
`front face
write memblock float mem, 32, ax# : write memblock float mem, 36, ay# : write memblock float mem, 40, az# : `0 vertex
write memblock float mem, 44, bx# : write memblock float mem, 48, by# : write memblock float mem, 52, bz# : `1 vertex
write memblock float mem, 56, cx# : write memblock float mem, 60, cy# : write memblock float mem, 64, cz# : `2 vertex
write memblock float mem, 68, dx# : write memblock float mem, 72, dy# : write memblock float mem, 76, dz# : `3 vertex
`back face
write memblock float mem, 80, fx# : write memblock float mem, 84, fy# : write memblock float mem, 88, fz# : `4 vertex
write memblock float mem, 92, ex# : write memblock float mem, 96, ey# : write memblock float mem, 100, ez# : `5 vertex
write memblock float mem, 104, hx# : write memblock float mem, 108, hy# : write memblock float mem, 112, hz# : `6 vertex
write memblock float mem, 116, gx# : write memblock float mem, 120, gy# : write memblock float mem, 124, gz# : `7 vertex
`left face
write memblock float mem, 128, bx# : write memblock float mem, 132, by# : write memblock float mem, 136, bz# : `8 vertex
write memblock float mem, 140, fx# : write memblock float mem, 144, fy# : write memblock float mem, 148, fz# : `9 vertex
write memblock float mem, 152, dx# : write memblock float mem, 156, dy# : write memblock float mem, 160, dz# : `10 vertex
write memblock float mem, 164, hx# : write memblock float mem, 168, hy# : write memblock float mem, 172, hz# : `11 vertex
`right face
write memblock float mem, 176, ex# : write memblock float mem, 180, ey# : write memblock float mem, 184, ez# : `12 vertex
write memblock float mem, 188, ax# : write memblock float mem, 192, ay# : write memblock float mem, 196, az# : `13 vertex
write memblock float mem, 200, gx# : write memblock float mem, 204, gy# : write memblock float mem, 208, gz# : `14 vertex
write memblock float mem, 212, cx# : write memblock float mem, 216, cy# : write memblock float mem, 220, cz# : `15 vertex
`top face
write memblock float mem, 224, hx# : write memblock float mem, 228, hy# : write memblock float mem, 232, hz# : `16 vertex
write memblock float mem, 236, gx# : write memblock float mem, 240, gy# : write memblock float mem, 244, gz# : `17 vertex
write memblock float mem, 248, dx# : write memblock float mem, 252, dy# : write memblock float mem, 256, dz# : `18 vertex
write memblock float mem, 260, cx# : write memblock float mem, 264, cy# : write memblock float mem, 268, cz# : `19 vertex
`bottom face
write memblock float mem, 272, bx# : write memblock float mem, 276, by# : write memblock float mem, 280, bz# : `20 vertex
write memblock float mem, 284, ax# : write memblock float mem, 288, ay# : write memblock float mem, 292, az# : `21 vertex
write memblock float mem, 296, fx# : write memblock float mem, 300, fy# : write memblock float mem, 304, fz# : `22 vertex
write memblock float mem, 308, ex# : write memblock float mem, 312, ey# : write memblock float mem, 316, ez# : `23 vertex
`write normal data to memblock
restore _normdata
for pos = pos_norms to pos_norms+(num_norms*12)-12 step 12
read x,y,z
write memblock float mem, pos, x
write memblock float mem, pos+4, y
write memblock float mem, pos+8, z
next pos
`write face data to memblock
restore _facedata
for pos = pos_faces to pos_faces+(num_faces*28)-28 step 28
read nvf, va,na, vb, nb, vc,nc
write memblock dword mem, pos, nvf
write memblock dword mem, pos+4, va
write memblock dword mem, pos+8, na
write memblock dword mem, pos+12, vb
write memblock dword mem, pos+16, nb
write memblock dword mem, pos+20, vc
write memblock dword mem, pos+24, nc
next pos
`write UV data to memblock
restore _uvdata
for pos = pos_uv to pos_uv+(num_sides*32)-32 step 32
read ua#,va#, ub#,vb#, uc#,vc#, ud#,vd#
write memblock float mem, pos, ua#
write memblock float mem, pos+4, va#
write memblock float mem, pos+8, ub#
write memblock float mem, pos+12, vb#
write memblock float mem, pos+16, uc#
write memblock float mem, pos+20, vc#
write memblock float mem, pos+24, ud#
write memblock float mem, pos+28, vd#
next pos
`create mesh then create object, delete mesh and memblock
make mesh from memblock num, mem
delete memblock 1
_normdata:
data 0,1,1, 0,1,1, 0,1,1, 0,1,1 :`front
data 0,0,-1, 0,0,-1, 0,0,-1, 0,0,-1 :`back
data -1,0,0, -1,0,0, -1,0,0, -1,0,0 :`left
data 1,0,0, 1,0,0, 1,0,0, 1,0,0 :`right
data 0,1,0, 0,1,0, 0,1,0, 0,1,0 :`top
data 0,-1,0, 0,-1,0, 0,-1,0, 0,-1,0 :`bottom
_facedata:
data 3, 0,0, 3,3, 1,1 :`front face 0
data 3, 3,3, 0,0, 2,2 :`front face 1
data 3, 4,4, 7,7, 5,5 :`back face 2
data 3, 7,7, 4,4, 6,6 :`back face 3
data 3, 8,8, 11,11, 9,9 :`left face 4
data 3, 11,11, 8,8, 10,10 :`left face 5
data 3, 12,12, 15,15, 13,13 :`right face 6
data 3, 15,15, 12,12, 14,14 :`right face 7
data 3, 16,16, 19,19, 17,17 :`top face 8
data 3, 19,19, 16,16, 18,18 :`top face 9
data 3, 20,20, 23,23, 21,21 :`bottom face 10
data 3, 23,23, 20,20, 22,22 :`bottom face 11
_uvdata:
data 0.03,0.47, 0.30,0.47, 0.03,0.03, 0.30,0.03 :`front
data 0.03,0.97, 0.30,0.97, 0.03,0.53, 0.30,0.53 :`back
data 0.36,0.47, 0.63,0.47, 0.36,0.03, 0.63,0.03 :`left
data 0.36,0.97, 0.63,0.97, 0.36,0.53, 0.63,0.53 :`right
data 0.69,0.47, 0.97,0.47, 0.69,0.03, 0.97,0.03 :`top
data 0.69,0.97, 0.97,0.97, 0.69,0.53, 0.97,0.53 :`bottom
endfunction
`+++++++++++++ FUNCTIONS FOR POINT IN SHAPE +++++++++++++++
function POINT_IN_ABCD(px#,pz#, ax#,az#, bx#,bz#, cx#,cz#, dx#,dz#)
`this function determines if a point is inside a four sided shape
if POINT_IN_ABC(px#,pz#, ax#,az#, dx#,dz#, bx#,bz#) = 1
inside = 1
else
if POINT_IN_ABC(px#,pz#, dx#,dz#, ax#,az#, cx#,cz#) = 1
inside = 1
else
inside = 0
endif
endif
endfunction inside
function POINT_IN_ABC(px#,pz#, ax#,az#, bx#,bz#, cx#,cz#)
`this function determines if a point is inside a triangle
if SAME_SIDE(px#,pz#, cx#,cz#, ax#,az#,bx#,bz#) = 1
if SAME_SIDE(px#,pz#, ax#,az#, bx#,bz#,cx#,cz#) = 1
if SAME_SIDE(px#,pz#, bx#,bz#, cx#,cz#,ax#,az#) = 1
inside = 1
else
inside = 0
endif
else
inside = 0
endif
else
inside = 0
endif
endfunction inside
function SAME_SIDE(px#,pz#, rx#,rz#, sx#,sz#,fx#,fz#)
`this function determines if point p is on same side of line sf as point r
psi# = px# - sx#: psj# = pz# - sz# :`vector ps
fsi# = fx# - sx#: fsj# = fz# - sz# :`vector fs
rsi# = rx# - sx#: rsj# = rz# - sz# :`vector rs
fs_cross_ps# = fsi#*psj# - psi#*fsj# :`cross product of vectors fs and ps
fs_cross_rs# = fsi#*rsj# - rsi#*fsj# :`cross product of vectors fs and rs
if fs_cross_ps# > 0 then fs_cross_ps# = 1 else fs_cross_ps# = -1
if fs_cross_rs# > 0 then fs_cross_rs# = 1 else fs_cross_rs# = -1
if fs_cross_ps# = fs_cross_rs# then yes = 1 else yes = 0
endfunction yes
`++++++ FUNCTIONS FOR CIRCLE ON LINE COLLISION +++++++++++++++++++++++++++++++++++++++++++++
function XD_ON_LINE(px#,pz#, ax#,az#,bx#,bz#)
`line parallel with x axis
if az# = bz#
pdx# = px#
endif
`line parallel with z axis
if ax# = bx#
pdx# = ax#
endif
`line is not parallel to either x or z axis
if az# <> bz# and ax# <> bx#
mab# = (bx# - ax#)/(bz# - az#)
aaa# = (ax#/mab#) + (mab#*px#)
bbb# = pz# - az#
ccc# = mab# + (1/mab#)
pdx# = (aaa# + bbb#) / ccc#
endif
endfunction pdx#
function ZD_ON_LINE(px#,pz#, ax#,az#,bx#,bz#)
`line parallel with x axis
if az# = bz#
pdz# = az#
endif
`line parallel with z axis
if ax# = bx#
pdz# = pz#
endif
`line is not parallel to either x or z axis
if az# <> bz# and ax# <> bx#
mab# = (bx# - ax#)/(bz# - az#)
aaa# = (pz#/mab#) + mab#*az#
bbb# = px# - ax#
ccc# = mab# + (1/mab#)
pdz# = (aaa# + bbb#) / ccc#
endif
endfunction pdz#
function V_ALONG_LINE(pdx#,pdz#, ax#,az#,bx#,bz#)
gx# = (bx# + ax#) / 2
gz# = (bz# + az#) / 2
v# = sqrt( (gx# - pdx#)^2 + (gz# - pdz#)^2 )
endfunction v#
function PDDX_FROM_POINT(px#,pz#, ex#,ez#, s#,u#)
pddx_p# = (s#*(px#-ex#)/u#) + ex#
endfunction pddx_p#
function PDDZ_FROM_POINT(px#,pz#, ex#,ez#, s#,u#)
pddz_p# = ez# - (s#*(ez#-pz#)/u#)
endfunction pddz_p#
`+++++++++++++++++++++++++++++++++++++++++++++++++++
`++++++ MAP DATA +++++++++++++++++++++++++++++++++++
`+++++++++++++++++++++++++++++++++++++++++++++++++++
_map_database:
`row 1
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 01
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 02
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 03
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 04
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 05
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 06
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 07
data 01,02,03,04,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 08
data 01,02,03,04,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 09
data 01,02,03,04,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 10
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 11
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 12
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 13
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 14
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 15
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 16
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 17
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 18
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 19
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 20
`row 2
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 01
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 02
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 03
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 04
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 05
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 06
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 07
data 01,02,03,04,05,06,07,08,00,00,00,00,00,00,00,00,00,00,00,00 : `col 08
data 01,02,03,04,05,06,07,08,00,00,00,00,00,00,00,00,00,00,00,00 : `col 09
data 01,02,03,04,05,06,07,08,00,00,00,00,00,00,00,00,00,00,00,00 : `col 10
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 11
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 12
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 13
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 14
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 15
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 16
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 17
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 18
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 19
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 20
`row 3
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 01
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 02
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 03
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 04
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 05
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 06
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 07
data 01,02,03,04,05,06,07,08,00,00,00,00,00,00,00,00,00,00,00,00 : `col 08
data 01,02,03,04,05,06,07,08,00,00,00,00,00,00,00,00,00,00,00,00 : `col 09
data 01,02,03,04,05,06,07,08,00,00,00,00,00,00,00,00,00,00,00,00 : `col 10
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 11
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 12
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 13
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 14
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 15
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 16
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 17
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 18
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 19
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 20
`row 4
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 01
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 02
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 03
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 04
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 05
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 06
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 07
data 05,06,07,08,09,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 08
data 05,06,07,08,09,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 09
data 05,06,07,08,09,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 10
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 11
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 12
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 13
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 14
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 15
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 16
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 17
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 18
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 19
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 20
`row 5
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 01
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 02
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 03
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 04
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 05
data 11,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 06
data 10,11,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 07
data 09,10,11,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 08
data 09,10,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 09
data 09,10,14,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 10
data 10,14,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 11
data 14,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 12
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 13
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 14
data 16,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 15
data 16,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 16
data 16,17,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 17
data 17,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 18
data 17,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 19
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 20
`row 6
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 01
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 02
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 03
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 04
data 11,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 05
data 11,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 06
data 10,11,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 07
data 09,10,11,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 08
data 09,10,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 09
data 09,10,14,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 10
data 10,14,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 11
data 14,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 12
data 14,15,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 13
data 14,15,16,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 14
data 15,16,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 15
data 16,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 16
data 16,17,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 17
data 17,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 18
data 17,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 19
data 17,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 20
`row 7
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 01
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 02
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 03
data 11,12,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 04
data 11,12,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 05
data 11,12,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 06
data 10,11,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 07
data 10,11,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 08
data 10,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 09
data 10,14,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 10
data 10,14,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 11
data 14,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 12
data 14,15,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 13
data 14,15,16,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 14
data 15,16,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 15
data 16,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 16
data 16,17,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 17
data 17,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 18
data 17,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 19
data 17,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 20
`row 8
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 01
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 02
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 03
data 11,12,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 04
data 11,12,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 05
data 11,12,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 06
data 11,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 07
data 11,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 08
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 09
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 10
data 14,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 11
data 14,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 12
data 14,15,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 13
data 14,15,16,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 14
data 15,16,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 15
data 16,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 16
data 16,17,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 17
data 17,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 18
data 17,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 19
data 17,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 20
`row 9
data 13,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 01
data 13,29,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 02
data 13,27,28,29,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 03
data 12,13,23,24,25,26,27,28,00,00,00,00,00,00,00,00,00,00,00,00 : `col 04
data 11,12,13,19,20,21,22,23,24,00,00,00,00,00,00,00,00,00,00,00 : `col 05
data 11,12,13,18,19,20,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 06
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 07
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 08
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 09
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 10
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 11
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 12
data 14,15,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 13
data 14,15,16,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 14
data 15,16,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 15
data 16,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 16
data 16,17,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 17
data 17,74,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 18
data 17,74,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 19
data 17,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 20
`row 10
data 13,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 01
data 13,29,30,73,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 02
data 13,27,28,29,30,73,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 03
data 12,13,23,24,25,26,27,28,30,00,00,00,00,00,00,00,00,00,00,00 : `col 04
data 12,13,19,20,21,22,23,24,30,00,00,00,00,00,00,00,00,00,00,00 : `col 05
data 12,13,18,19,20,30,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 06
data 13,30,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 07
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 08
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 09
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 10
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 11
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 12
data 54,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 13
data 54,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 14
data 16,54,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 15
data 16,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 16
data 16,17,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 17
data 17,74,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 18
data 17,74,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 19
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 20
`row 11
data 13,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 01
data 13,29,30,73,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 02
data 13,27,28,29,30,73,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 03
data 13,23,24,25,26,27,28,30,00,00,00,00,00,00,00,00,00,00,00,00 : `col 04
data 13,20,21,22,23,24,30,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 05
data 13,18,19,20,30,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 06
data 13,30,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 07
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 08
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 09
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 10
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 11
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 12
data 54,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 13
data 54,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 14
data 54,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 15
data 54,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 16
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 17
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 18
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 19
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 20
`row 12
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 01
data 30,31,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 02
data 30,31,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 03
data 30,31,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 04
data 30,31,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 05
data 30,31,75,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 06
data 30,31,75,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 07
data 75,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 08
data 75,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 09
data 75,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 10
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 11
data 53,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 12
data 51,52,53,54,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 13
data 52,53,54,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 14
data 54,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 15
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 16
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 17
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 18
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 19
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 20
`row 13
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 01
data 30,31,32,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 02
data 30,31,32,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 03
data 30,31,32,72,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 04
data 30,31,32,33,72,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 05
data 30,31,33,72,75,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 06
data 30,31,33,75,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 07
data 33,43,44,75,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 08
data 33,43,44,75,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 09
data 43,44,45,46,75,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 10
data 43,44,45,46,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 11
data 45,46,53,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 12
data 51,52,53,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 13
data 51,52,53,54,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 14
data 53,54,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 15
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 16
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 17
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 18
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 19
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 20
`row 14
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 01
data 31,32,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 02
data 31,32,33,34,35,36,72,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 03
data 31,32,33,34,35,36,37,38,39,40,72,00,00,00,00,00,00,00,00,00 : `col 04
data 31,32,33,37,38,39,40,41,42,72,00,00,00,00,00,00,00,00,00,00 : `col 05
data 33,41,42,75,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 06
data 33,75,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 07
data 33,43,44,75,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 08
data 33,43,44,75,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 09
data 43,44,45,46,75,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 10
data 43,44,45,46,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 11
data 45,46,51,52,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 12
data 45,46,51,52,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 13
data 45,46,51,52,53,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 14
data 53,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 15
data 50,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 16
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 17
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 18
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 19
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 20
`row 15
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 01
data 32,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 02
data 32,33,34,35,36,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 03
data 32,33,34,35,36,37,38,39,40,72,00,00,00,00,00,00,00,00,00,00 : `col 04
data 32,33,37,38,39,40,41,42,72,00,00,00,00,00,00,00,00,00,00,00 : `col 05
data 33,41,42,72,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 06
data 33,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 07
data 33,43,44,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 08
data 33,43,44,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 09
data 43,44,45,46,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 10
data 43,44,45,46,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 11
data 45,46,51,69,70,71,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 12
data 45,46,51,52,65,66,67,68,69,70,71,00,00,00,00,00,00,00,00,00 : `col 13
data 45,46,47,48,51,52,65,66,67,00,00,00,00,00,00,00,00,00,00,00 : `col 14
data 45,46,47,48,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 15
data 45,46,47,48,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 16
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 17
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 18
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 19
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 20
`row 16
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 01
data 32,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 02
data 32,33,34,35,36,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 03
data 32,33,34,35,36,37,38,39,40,72,00,00,00,00,00,00,00,00,00,00 : `col 04
data 32,33,37,38,39,40,41,42,72,00,00,00,00,00,00,00,00,00,00,00 : `col 05
data 33,41,42,72,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 06
data 33,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 07
data 33,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 08
data 33,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 09
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 10
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 11
data 45,46,69,70,71,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 12
data 45,46,65,66,67,68,69,70,71,00,00,00,00,00,00,00,00,00,00,00 : `col 13
data 45,46,47,48,61,62,63,64,65,66,67,00,00,00,00,00,00,00,00,00 : `col 14
data 45,46,47,48,61,62,63,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 15
data 45,46,47,48,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 16
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 17
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 18
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 19
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 20
`row 17
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 01
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 02
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 03
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 04
data 33,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 05
data 33,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 06
data 33,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 07
data 33,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 08
data 33,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 09
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 10
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 11
data 49,55,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 12
data 49,50,55,56,57,65,66,67,00,00,00,00,00,00,00,00,00,00,00,00 : `col 13
data 47,48,49,50,56,57,58,59,60,61,62,63,64,65,66,00,00,00,00,00 : `col 14
data 45,46,47,48,49,50,58,59,60,61,62,63,00,00,00,00,00,00,00,00 : `col 15
data 47,48,49,50,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 16
data 49,50,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 17
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 18
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 19
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 20
`row 18
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 01
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 02
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 03
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 04
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 05
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 06
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 07
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 08
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 09
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 10
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 11
data 49,55,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 12
data 49,50,55,56,57,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 13
data 47,48,49,50,56,57,58,59,60,00,00,00,00,00,00,00,00,00,00,00 : `col 14
data 47,48,49,50,58,59,60,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 15
data 47,48,49,50,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 16
data 49,50,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 17
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 18
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 19
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 20
`row 19
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 01
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 02
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 03
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 04
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 05
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 06
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 07
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 08
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 09
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 10
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 11
data 49,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 12
data 49,50,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 13
data 49,50,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 14
data 49,50,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 15
data 49,50,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 16
data 49,50,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 17
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 18
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 19
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 20
`row 20
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 01
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 02
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 03
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 04
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 05
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 06
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 07
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 08
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 09
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 10
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 11
data 49,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 12
data 49,50,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 13
data 49,50,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 14
data 49,50,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 15
data 49,50,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 16
data 49,50,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 17
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 18
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 19
data 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 : `col 20
_block_data:
`one, two, three and four are the four corners of the block
`they must be specified in an anticlockwise direction as viewed from the top
` colour, onex,onez, twox,twoz, threex,threez, fourx,fourz, top,btm
`1 to 5
data 120000, 9.00,1.25, 8.00,1.25, 8.00,1.00, 9.00,1.00, 0.10,0.00
data 120000, 9.00,1.50, 8.00,1.50, 8.00,1.25, 9.00,1.25, 0.20,0.00
data 120000, 9.00,1.75, 8.00,1.75, 8.00,1.50, 9.00,1.50, 0.30,0.00
data 120000, 9.00,2.00, 8.00,2.00, 8.00,1.75, 9.00,1.75, 0.40,0.00
data 120000, 9.00,2.25, 8.00,2.25, 8.00,2.00, 9.00,2.00, 0.50,0.00
`6 to 10
data 120000, 9.00,2.50, 8.00,2.50, 8.00,2.25, 9.00,2.25, 0.60,0.00
data 120000, 9.00,2.75, 8.00,2.75, 8.00,2.50, 9.00,2.50, 0.70,0.00
data 120000, 9.00,3.00, 8.00,3.00, 8.00,2.75, 9.00,2.75, 0.80,0.00
data 120000, 9.00,5.00, 8.00,5.00, 8.00,3.00, 9.00,3.00, 0.80,0.60
data 120000, 9.76,6.00, 7.30,6.00, 7.00,5.00, 10.00,5.00, 0.80,0.60
`11 to 15
data 120000, 7.30,6.00, 5.00,7.54, 4.00,7.00, 7.00,5.00, 0.80,0.00
data 120000, 5.00,9.00, 4.00,9.00, 4.00,7.00, 5.00,7.54, 0.80,0.00
data 120000, 6.00,10.00, 1.00,10.00, 1.00,9.00, 6.00,9.00, 0.80,0.00
data 120000, 13.00,7.62, 9.76,6.00, 10.00,5.00, 13.00,6.50, 0.80,0.60
data 120000, 14.00,7.62, 13.00,7.62, 13.00,6.50, 14.00,6.50, 0.80,0.60
`16 to 20
data 120000, 16.00,9.00, 14.00,8.00, 14.00,6.00, 16.00,5.00, 0.80,0.00
data 120000, 19.00,8.00, 17.00,9.00, 17.00,5.00, 19.00,6.00, 0.80,0.00
data 121000, 5.50,10.00, 5.25,10.00, 5.25,9.50, 5.50,9.50, 0.90,0.80
data 121000, 5.25,10.00, 5.00,10.00, 5.00,9.50, 5.25,9.50, 1.00,0.80
data 121000, 5.00,10.00, 4.75,10.00, 4.75,9.50, 5.00,9.50, 1.10,0.80
`21 to 25
data 121000, 4.75,10.00, 4.50,10.00, 4.50,9.50, 4.75,9.50, 1.20,0.80
data 121000, 4.50,10.00, 4.25,10.00, 4.25,9.50, 4.50,9.50, 1.30,0.80
data 121000, 4.25,10.00, 4.00,10.00, 4.00,9.50, 4.25,9.50, 1.40,0.90
data 121000, 4.00,10.00, 3.75,10.00, 3.75,9.50, 4.00,9.50, 1.50,1.00
data 121000, 3.75,10.00, 3.50,10.00, 3.50,9.50, 3.75,9.50, 1.60,1.10
`26 to 30
data 121000, 3.50,10.00, 3.25,10.00, 3.25,9.50, 3.50,9.50, 1.70,1.20
data 121000, 3.25,10.00, 3.00,10.00, 3.00,9.50, 3.25,9.50, 1.80,1.30
data 121000, 3.00,10.00, 2.75,10.00, 2.75,9.50, 3.00,9.50, 1.90,1.40
data 120000, 2.75,10.00, 2.00,10.00, 2.00,9.50, 2.75,9.50, 2.00,1.60
data 120000, 6.00,12.00, 2.00,12.00, 2.00,10.00, 6.00,10.00, 2.00,0.00
`31 to 35
data 120000, 6.00,12.50, 2.00,12.50, 2.00,12.00, 6.00,12.00, 2.00,0.30
data 120000, 4.00,15.50, 2.00,15.50, 2.00,12.50, 4.00,12.50, 2.00,0.00
data 119000, 8.00,16.00, 5.00,16.00, 5.00,12.50, 8.00,12.50, 3.00,0.00
data 122000, 3.00,15.00, 2.75,15.00, 2.75,14.00, 3.00,14.00, 2.10,2.00
data 122000, 3.25,15.00, 3.00,15.00, 3.00,14.00, 3.25,14.00, 2.20,2.00
`36 to 40
data 122000, 3.50,15.00, 3.25,15.00, 3.25,14.00, 3.50,14.00, 2.30,2.00
data 122000, 3.75,15.00, 3.50,15.00, 3.50,14.00, 3.75,14.00, 2.40,2.00
data 122000, 4.00,15.00, 3.75,15.00, 3.75,14.00, 4.00,14.00, 2.50,2.00
data 122000, 4.25,15.00, 4.00,15.00, 4.00,14.00, 4.25,14.00, 2.60,2.10
data 122000, 4.50,15.00, 4.25,15.00, 4.25,14.00, 4.50,14.00, 2.70,2.20
`41 to 45
data 122000, 4.75,15.00, 4.50,15.00, 4.50,14.00, 4.75,14.00, 2.80,2.30
data 122000, 5.00,15.00, 4.75,15.00, 4.75,14.00, 5.00,14.00, 2.90,2.40
data 119000, 9.81,14.00, 8.00,14.00, 8.00,13.00, 10.00,13.00, 1.70,1.20
data 119000, 9.81,14.00, 8.00,14.00, 8.00,13.00, 10.00,13.00, 3.00,2.50
data 119000, 14.00,15.68, 9.81,14.00, 10.00,13.00, 15.00,15.00, 1.70,0.00
`46 to 50
data 119000, 14.00,15.68, 9.81,14.00, 10.00,13.00, 15.00,15.00, 3.00,2.50
data 119000, 15.00,17.00, 14.00,17.00, 14.00,15.68, 15.00,15.00, 1.70,0.00
data 119000, 15.00,17.00, 14.00,17.00, 14.00,15.68, 15.00,15.00, 3.00,2.50
data 119000, 16.00,19.00, 12.00,19.00, 12.00,17.00, 16.00,17.00, 1.70,0.00
data 119000, 16.00,19.00, 13.00,19.00, 13.00,17.00, 16.00,17.00, 3.00,2.50
`51 to 55
data 119000, 12.96,14.19, 12.04,13.82, 12.67,12.25, 13.60,12.62, 1.70,1.20
data 119000, 12.96,14.19, 12.04,13.82, 12.86,11.79, 13.77,12.16, 3.00,2.50
data 119000, 14.52,13.00, 12.19,12.07, 12.38,11.61, 14.70,12.54, 1.70,0.00
data 121000, 14.24,12.35, 12.38,11.61, 13.12,9.75, 14.98,10.49, 3.10,0.00
data 121000, 12.50,17.00, 12.00,17.00, 12.00,16.50, 12.50,16.50, 1.70,0.00
`56 to 60
data 121000, 12.75,17.00, 12.50,17.00, 12.50,16.50, 12.75,16.50, 1.60,0.00
data 121000, 13.00,17.00, 12.75,17.00, 12.75,16.50, 13.00,16.50, 1.50,0.00
data 121000, 13.25,17.00, 13.00,17.00, 13.00,16.50, 13.25,16.50, 1.40,0.00
data 121000, 13.50,17.00, 13.25,17.00, 13.25,16.50, 13.50,16.50, 1.30,0.00
data 121000, 14.00,17.00, 13.50,17.00, 13.50,16.50, 14.00,16.50, 1.20,0.00
`61 to 65
data 121000, 14.00,16.50, 13.50,16.50, 13.50,16.25, 14.00,16.25, 1.10,0.00
data 121000, 14.00,16.25, 13.50,16.25, 13.50,16.00, 14.00,16.00, 1.00,0.00
data 121000, 14.00,16.00, 13.50,16.00, 13.72,15.46, 14.00,15.57, 0.90,0.00
data 121000, 13.50,16.00, 13.27,15.91, 13.48,15.37, 13.72,15.46, 0.80,0.00
data 121000, 13.27,15.91, 13.04,15.82, 13.25,15.27, 13.48,15.37, 0.70,0.00
`66 to 70
data 121000, 13.04,15.82, 12.80,15.72, 13.02,15.18, 13.25,15.27, 0.60,0.00
data 121000, 12.80,15.72, 12.57,15.63, 12.79,15.09, 13.02,15.18, 0.50,0.00
data 121000, 12.57,15.63, 12.34,15.54, 12.56,14.99, 12.79,15.09, 0.40,0.00
data 121000, 12.34,15.54, 12.11,15.44, 12.32,14.90, 12.56,14.99, 0.30,0.00
data 121000, 12.11,15.44, 11.87,15.35, 12.09,14.81, 12.32,14.90, 0.20,0.00
`71 to 75
data 121000, 11.87,15.35, 11.64,15.26, 11.86,14.72, 12.09,14.81, 0.10,0.00
data 120000, 5.00,15.5, 4.00,15.5, 4.00,12.50, 5.00,12.50, 2.00,0.30
data 122000, 2.0,10.5, 1.5,10.5, 1.5,10.0, 2.0,10.0, 0.40,0.00
data 122000, 18.5,9.25, 17.5,9.25, 17.5,8.0, 18.5,8.0, 0.40,0.00
data 119000, 9.5,13.0, 6.0,13.0, 6.0,12.0, 8.5,12.0, 1.70,1.20
`end of block data
data 0, 0.0,0.0, 0.0,0.0, 0.0,0.0, 0.0,0.0, 0.0,0.0
There are a couple of minor glitches, the main one being that it's possible to get stuck at the bottom of the stairs if you slide agianst the side of them (you can jump out of it).
I was going to add a few more things to this post but for some reason it wouldn't let me post the whole lot in one go. If this works I'll do another post.