REM Project: Weather challenge
REM Created: 2/10/2005 9:01:35 PM
REM By Coding Fodder
REM ***** Main Source File *****
REM
REM Not cleaned up yet Kinda trashy coding with cool results
 
sync on:sync rate 0
autocam off
fog on
position camera 2500,500,2500
global strike
global strike2
global counter
global counter2
x_size=5000
z_size=5000
x_tiles=100
z_tiles=100
seed=0
 
if seed=0 then seed=timer()
 
type matrix
   x_grids as integer
   z_grids as integer
   grid_spacing as float
endtype
 
dim matrices(4) as matrix
 
create bitmap 1,16,16
make memblock from bitmap 1,1
for i=0 to 15
   for j=0 to 15
      read color
      set_memblock_pixel(1,i,j,color)
   next j
next i
make bitmap from memblock 1,1
delete memblock 1
get image 1,0,0,15,15
 
 
 
make matrix 1,5000,5000,100,100
position matrix 1,50,-10,50
 
for m=1 to 2
   my_matrix(m,100,100,50)
   Matrix_form_function(m,"seed "+str$(seed)+" sin 150 200 1,150 200 1 0 5 3,0 5 3 5 10 3,5 10 3 8 15 3,8 15 3 0 10 3,0 10 3 0 8 3,0 8 3 roughen 6 300 ",2,700)
   set_matrix_normals(m)
   if m=1
   for i=1 to 100
      for j=1 to 100
         set_uv(m,i,j,(i-1)/10.0,(j-1)/10.0)
      next j
   next i
   endif
 
   make mesh from memblock m,m
   change mesh m,0,m
   texture object m,1
next m
`remstart
create bitmap 3,12,1
make memblock from bitmap 3,3
for i=0 to 11
   read color
   set_memblock_pixel(3,i,0,color)
next i
make bitmap from memblock 3,3
set current bitmap 0
lock pixels
for i=1 to 256
   for j=1 to 256
      x#=i*100.0/256.0*50.0
      z#=j*100.0/256.0*50.0
      h#=get ground height(1,x#,z#)
      hmap=0
      if h#>30.0 then hmap=1
      if h#>70.0 then hmap=2
      if h#>120.0 then hmap=3
      if h#>170.0 then hmap=4
      if h#>220.0 then hmap=5
      if h#>270.0 then hmap=6
      if h#>320.0 then hmap=7
      if h#>370.0 then hmap=8
      if h#>420.0 then hmap=9
      if h#>470.0 then hmap=10
      if h#>520.0 then hmap=11
      color=get_memblock_pixel(3,hmap,0)
      red=rgbr(color)
      green=rgbg(color)
      blue=rgbb(color)
      red=red+rnd(20)-10
      blue=blue+rnd(20)-10
      green=green+rnd(20)-10
      if red<0 then red=0
      if green<0 then green=0
      if blue<0 then blue=0
      if red>255 then red=255
      if green>255 then green=255
      if blue>255 then blue=255
      set_locked_pixel(256-i,256-j,rgb(red,green,blue))
   next j
next i
delete memblock 3
delete bitmap 3
delete memblock 1
delete memblock 2
delete bitmap 1
unlock pixels
get image 2,0,0,255,255
texture object 2,2
 
set current bitmap 0
ghost object on 2
make object plain 3,5000,5000
xrotate object 3,-90
create bitmap 3,640,480
color=rgb(0,0,200)
box 0,0,640,480,color,color,color,color
get image 3,0,0,639,479
texture object 3,3
 
set object specular 3,rgb(0,0,200)
set object specular power 3,100
 
set current bitmap 0
ghost object on 3
position object 3,2500,0,2500
 
make object plain 4,640,480
position object 4,0,0,50
lock object on 4
color object 4,RGB(255,255,255)
ghost object on 4
 
`hide object 1
hide object 4
 
create bitmap 10,8,64
make memblock from bitmap 10,10
for j=0 to 63
   for i=0 to 7
      read color
      set_memblock_pixel(10,i,j,color)
   next i
next j
make bitmap from memblock 10,10
delete memblock 10
get image 10,0,0,7,63
 
sprite 1,0,0,10
set current bitmap 0
do
   angle#=wrapvalue(angle#+0.5)
   wave#=sin(angle#)*5
   position object 3,2500,wave#,2500
   text 1,1,str$(screen fps())+" "+str$(seed)
   control camera using arrowkeys 0,3,2
   position camera camera position x(),get ground height(1,camera position x(),camera position z())+50,camera position z()
 
   if mouseclick()=1 then strike=1
   if strike=1 then lightning()
 
   sync
loop
 
function lightning()
   if strike2=0
    size sprite 1,mousey()/8,mousey()
    show sprite 1
    offset sprite 1,-mousex(),0
 
    show object 4
      inc counter2
      if counter2=6
        strike2=1
        mirror sprite 1
        inc counter
        counter2=0
      endif
   else
      inc counter2
      hide object 4
      hide sprite 1
      if counter2=5
         strike2=0
         inc counter
         counter2=0
      endif
   endif
   if counter=10
      strike2=0
      hide object 4
      counter=0
      strike=0
   endif
endfunction
 
function my_matrix(num,x_grids,z_grids,grid_spacing)
   matrices(num).x_grids=x_grids
   matrices(num).z_grids=z_grids
   matrices(num).grid_spacing=grid_spacing
   make memblock num,(6*x_grids*z_grids*32)+12
   write memblock dword num,0,274
   write memblock dword num,4,32
   write memblock dword num,8,6*x_grids*z_grids
 
   for i=1 to x_grids+1
      for j=1 to z_grids+1
         position_vert(num,i,j,i*grid_spacing,-10.0,j*grid_spacing)
         num1#=(1+matrices(num).x_grids-i)
         num2#=matrices(num).x_grids
         num3#=(1+matrices(num).z_grids-j)
         num4#=matrices(num).z_grids
         set_uv(num,i,j,num1#/num2#,num3#/num4#)
         set_normals(num,i,j,0,1,0)
      next j
   next i
   make mesh from memblock num,num
   make object num,num,1
endfunction
 
function set_normals(num,i,j,nx#,ny#,nz#)
   x=6*matrices(num).x_grids
   if i<matrices(num).x_grids+1 and j<matrices(num).z_grids+1
      set_normal_x(num,1+(i-1)*6+x*(j-1),nx#)
      set_normal_y(num,1+(i-1)*6+x*(j-1),ny#)
      set_normal_z(num,1+(i-1)*6+x*(j-1),nz#)
      set_normal_x(num,4+(i-1)*6+x*(j-1),nx#)
      set_normal_y(num,4+(i-1)*6+x*(j-1),ny#)
      set_normal_z(num,4+(i-1)*6+x*(j-1),nz#)
   endif
   if i>1 and j<matrices(num).z_grids+1
      set_normal_x(num,6+(i-2)*6+x*(j-1),nx#)
      set_normal_y(num,6+(i-2)*6+x*(j-1),ny#)
      set_normal_z(num,6+(i-2)*6+x*(j-1),nz#)
   endif
   if i>1 and j>1
      set_normal_x(num,3+(i-2)*6+x*(j-2),nx#)
      set_normal_y(num,3+(i-2)*6+x*(j-2),ny#)
      set_normal_z(num,3+(i-2)*6+x*(j-2),nz#)
      set_normal_x(num,5+(i-2)*6+x*(j-2),nx#)
      set_normal_y(num,5+(i-2)*6+x*(j-2),ny#)
      set_normal_z(num,5+(i-2)*6+x*(j-2),nz#)
   endif
   if i<matrices(num).x_grids+1 and j>1
      set_normal_x(num,2+(i-1)*6+x*(j-2),nx#)
      set_normal_y(num,2+(i-1)*6+x*(j-2),ny#)
      set_normal_z(num,2+(i-1)*6+x*(j-2),nz#)
   endif
endfunction
 
function set_uv(num,i,j,u#,v#)
 x=6*matrices(num).x_grids
   if i<matrices(num).x_grids+1 and j<matrices(num).z_grids+1
      set_U(num,1+(i-1)*6+x*(j-1),u#)
      set_v(num,1+(i-1)*6+x*(j-1),v#)
      set_u(num,4+(i-1)*6+x*(j-1),u#)
      set_v(num,4+(i-1)*6+x*(j-1),v#)
   endif
   if i>1 and j<matrices(num).z_grids+1
      set_u(num,6+(i-2)*6+x*(j-1),u#)
      set_v(num,6+(i-2)*6+x*(j-1),v#)
   endif
   if i>1 and j>1
      set_u(num,3+(i-2)*6+x*(j-2),u#)
      set_v(num,3+(i-2)*6+x*(j-2),v#)
      set_u(num,5+(i-2)*6+x*(j-2),u#)
      set_v(num,5+(i-2)*6+x*(j-2),v#)
   endif
   if i<matrices(num).x_grids+1 and j>1
      set_u(num,2+(i-1)*6+x*(j-2),u#)
      set_v(num,2+(i-1)*6+x*(j-2),v#)
   endif
endfunction
 
function position_vert(num,i,j,x#,y#,z#)
 x=6*matrices(num).x_grids
   if i<matrices(num).x_grids+1 and j<matrices(num).z_grids+1
      set_vertex_x(num,1+(i-1)*6+x*(j-1),x#)
      set_vertex_y(num,1+(i-1)*6+x*(j-1),y#)
      set_vertex_z(num,1+(i-1)*6+x*(j-1),z#)
      set_vertex_x(num,4+(i-1)*6+x*(j-1),x#)
      set_vertex_y(num,4+(i-1)*6+x*(j-1),y#)
      set_vertex_z(num,4+(i-1)*6+x*(j-1),z#)
   endif
   if i>1 and j<matrices(num).z_grids+1
      set_vertex_x(num,6+(i-2)*6+x*(j-1),x#)
      set_vertex_y(num,6+(i-2)*6+x*(j-1),y#)
      set_vertex_z(num,6+(i-2)*6+x*(j-1),z#)
   endif
   if i>1 and j>1
      set_vertex_x(num,3+(i-2)*6+x*(j-2),x#)
      set_vertex_y(num,3+(i-2)*6+x*(j-2),y#)
      set_vertex_z(num,3+(i-2)*6+x*(j-2),z#)
      set_vertex_x(num,5+(i-2)*6+x*(j-2),x#)
      set_vertex_y(num,5+(i-2)*6+x*(j-2),y#)
      set_vertex_z(num,5+(i-2)*6+x*(j-2),z#)
   endif
   if i<matrices(num).x_grids+1 and j>1
      set_vertex_x(num,2+(i-1)*6+x*(j-2),x#)
      set_vertex_y(num,2+(i-1)*6+x*(j-2),y#)
      set_vertex_z(num,2+(i-1)*6+x*(j-2),z#)
   endif
endfunction
 
 
rem  Accessor and mutator functions for vertex data
function Polygons(num)
   polyg=memblock dword(num,8)/3
endfunction polyg
 
function get_vertex_x(num,vertnum)
   result#=memblock float(num,(vertnum-1)*32+12)
endfunction result#
 
function get_vertex_y(num,vertnum)
   result#=memblock float(num,(vertnum-1)*32+16)
endfunction result#
 
function get_vertex_z(num,vertnum)
   result#=memblock float(num,(vertnum-1)*32+20)
endfunction result#
 
function set_vertex_x(num,vertnum,val#)
   write memblock float num,(vertnum-1)*32+12,val#
endfunction
 
function set_vertex_y(num,vertnum,val#)
   write memblock float num,(vertnum-1)*32+16,val#
endfunction
 
function set_vertex_z(num,vertnum,val#)
   write memblock float num,(vertnum-1)*32+20,val#
endfunction
 
 
 
function get_normal_x(num,vertnum)
   result#=memblock float(num,(vertnum-1)*32+24)
endfunction result#
 
function get_normal_y(num,vertnum)
   result#=memblock float(num,(vertnum-1)*32+28)
endfunction result#
 
function get_normal_z(num,vertnum)
   result#=memblock float(num,(vertnum-1)*32+32)
endfunction result#
 
function set_normal_x(num,vertnum,val#)
   write memblock float num,(vertnum-1)*32+24,val#
endfunction
 
function set_normal_y(num,vertnum,val#)
   write memblock float num,(vertnum-1)*32+28,val#
endfunction
 
function set_normal_z(num,vertnum,val#)
   write memblock float num,(vertnum-1)*32+32,val#
endfunction
 
 
 
function get_U(num,vertnum)
   result#=memblock float(num,(vertnum-1)*32+36)
endfunction result#
 
function get_V(num,vertnum)
   result#=memblock float(num,(vertnum-1)*32+40)
endfunction result#
 
function set_U(num,vertnum,val#)
   write memblock float num,(vertnum-1)*32+36,val#
endfunction
 
function set_V(num,vertnum,val#)
   write memblock float num,(vertnum-1)*32+40,val#
endfunction
 
function Matrix_form_function(num,format$,scale#,offset#)
 continue=1
   width=matrices(num).x_grids
   length=matrices(num).z_grids
   dim sinarray1#(width/4)
   dim sinarray2#(length/4)
   dim cosarray1#(width/4)
   dim cosarray2#(length/4)
   dim radialcos#(40)
 
   strlength=len(format$)
   position=1
   while continue=1
      locate=next_command(format$,position)
      command$=lower$(right$(Left$(format$,locate),locate-position+1))
 
      position=locate+2
 
      select command$
         case "sin":funct$="sin":begin=0:wavenum=1:endcase
         case "cos":funct$="cos":begin=0:wavenum=1:endcase
         case "radialcos":funct$="rcos":begin=0:wavenum=1:endcase
         case "rimwall":funct$="rwall":endcase
         case "seed":randomize (val(right$(left$(format$,next_command(format$,position)),next_command(format$,position)-position+1))):position=next_command(format$,position)+2:endcase
         case "wn":wavenum=val(right$(left$(format$,next_command(format$,position)),next_command(format$,position)-position+1)):position=next_command(format$,position)+2:endcase
         case "ct":centerx=val(right$(left$(format$,next_command(format$,position)),next_command(format$,position)-position+1)):position=next_command(format$,position)+2
                   centerz=val(right$(left$(format$,next_command(format$,position)),next_command(format$,position)-position+1)):position=next_command(format$,position)+2:endcase
         case " "::endcase
         case ","::endcase
         case "roughen":rough=1:roughstart=val(right$(left$(format$,next_command(format$,position)),next_command(format$,position)-position+1)):position=next_command(format$,position)+2
         roughamount=val(right$(left$(format$,next_command(format$,position)),next_command(format$,position)-position+1)):position=next_command(format$,position)+2:endcase
         case ")"::endcase
         case default:i=val(command$):inc begin:endcase
      endselect
 
      if begin>0
         select funct$
            case "sin"
               select begin
                  case 1:min=i:endcase
                  case 2:max=i:endcase
                  case 3
                     select i
                        case 1:sinarray1#(wavenum)=scale#*(rnd(max-min)+max):endcase
                        case 2:sinarray1#(wavenum)=scale#*(-1*(rnd(max-min)+max)):endcase
                        case 3:sinarray1#(wavenum)=scale#*((-1)^(rnd(2))*(rnd(max-min)+max)):endcase
                     endselect
                  endcase
                  case 4:min=i:endcase
                  case 5:max=i:endcase
                  case 6
                     select i
                        case 1:sinarray2#(wavenum)=scale#*(rnd(max-min)+max):endcase
                        case 2:sinarray2#(wavenum)=scale#*(-1*(rnd(max-min)+max)):endcase
                        case 3:sinarray2#(wavenum)=scale#*((-1)^(rnd(2))*(rnd(max-min)+max)):endcase
                     endselect
                     inc wavenum
                     begin=0
                  endcase
               endselect
            endcase
 
            case "cos"
               select begin
                  case 1:min=i:endcase
                  case 2:max=i:endcase
                  case 3
                     select i
                        case 1:cosarray1#(wavenum)=scale#*(rnd(max-min)+max):endcase
                        case 2:cosarray1#(wavenum)=scale#*(-1*(rnd(max-min)+max)):endcase
                        case 3:cosarray1#(wavenum)=scale#*((-1)^(rnd(2))*(rnd(max-min)+max)):endcase
                     endselect
                  endcase
                  case 4:min=i:endcase
                  case 5:max=i:endcase
                  case 6
                     select i
                        case 1:cosarray2#(wavenum)=scale#*(rnd(max-min)+max):endcase
                        case 2:cosarray2#(wavenum)=scale#*(-1*(rnd(max-min)+max)):endcase
                        case 3:cosarray2#(wavenum)=scale#*((-1)^(rnd(2))*(rnd(max-min)+max)):endcase
                     endselect
                     inc wavenum
                     begin=0
                  endcase
               endselect
            endcase
 
            case "rcos"
               select begin
                  case 1:min=i:endcase
                  case 2:max=i:endcase
                  case 3
                     select i
                        case 1:radialcos#(wavenum)=scale#*(rnd(max-min)+max):endcase
                        case 2:radialcos#(wavenum)=scale#*(-1*(rnd(max-min)+max)):endcase
                        case 3:radialcos#(wavenum)=scale#*((-1)^(rnd(2))*(rnd(max-min)+max)):endcase
                     endselect
                     inc wavenum
                     begin=0
                  endcase
               endselect
            endcase
         endselect
      endif
 
      if rough=1
         scaling#=roughamount
         for i=roughstart to width/4
            sinarray1#(i)= scaling#*scale#*(rnd(10))*((-1)^(rnd(2)))/700.0
            sinarray2#(i)= scaling#*scale#*(rnd(10))*((-1)^(rnd(2)))/700.0
            cosarray1#(i)= scaling#*scale#*(rnd(10))*((-1)^(rnd(2)))/700.0
            cosarray2#(i)= scaling#*scale#*(rnd(10))*((-1)^(rnd(2)))/700.0
            radialcos#(i)=scaling#*scale#*(rnd(10))*((-1)^(rnd(2)))/200.0
            scaling#=scaling#*0.94
 
         next i
         rough=0
      endif
   if position >= strlength then continue=0
   endwhile
 
   for i=0 to width
      for j=0 to length
         height#=0
         for x=1 to width/4
            height#=height#+(sinarray1#(x)*sin((x*i*180.0)/width))+(cosarray1#(x)*cos((x*i*180.0)/width))
         next x
 
         for y= 1 to length/4
            height#=height#+(sinarray2#(y)*sin((y*j*180.0)/length))+(cosarray2#(y)*cos((y*j*180.0)/length))
         next y
 
         distance#=sqrt(((width/2)-i)^2+((length/2)-j)^2)
         for x=1 to 40
            height#=height#+(radialcos#(x)*cos((x*distance#*180/width)))
         next x
 
         position_vert(num,i+1,j+1,(i+1)*matrices(num).grid_spacing,height#-offset#,(j+1)*matrices(num).grid_spacing)
         if num=1 then set matrix height 1,i,j,height#-offset#
      next j
   next i
   make mesh from memblock num,num
   change mesh num,0,num
   if num=1 then update matrix 1
   undim sinarray1#(0)
   undim sinarray2#(0)
   undim cosarray1#(0)
   undim cosarray2#(0)
   undim radialcos#(0)
 
endfunction
 
function next_command(format$,position)
   found=0
   length=len(format$)
   locate=position
   while found=0
 
      if locate>length
         found=1
      else
         if mid$(format$,locate)=" " or mid$(format$,locate)=","
            found=1
         endif
      endif
      inc locate
   endwhile
   locate=locate-2
endfunction locate
 
function set_matrix_normals(num)
   r=make vector3(vector)
      for i=2 to matrices(num).x_grids-1
         for j=2 to matrices(num).z_grids-1
            us#=((get_vertex_y(num,1+(i-2)*6+(j-1)*matrices(num).x_grids*6)-get_vertex_y(num,1+(i)*6+(j-1)*matrices(num).x_grids*6))/matrices(num).grid_spacing)
            vs#=((get_vertex_y(num,1+(i-1)*6+(j-2)*matrices(num).x_grids*6)-get_vertex_y(num,1+(i-1)*6+(j)*matrices(num).x_grids*6))/matrices(num).grid_spacing)
            set vector3 vector,us#,1,vs#
            normalize vector3 norm,vector
            set_normals(num,i,j,x vector3(norm),y vector3(norm),z vector3(norm))
         next j
      next i
   make mesh from memblock num,num
   change mesh num,0,num
endfunction
 
function set_memblock_pixel(memblock,x,y,color)
   width=memblock dword(memblock,0)
   height=memblock dword(memblock,4)
   depth=memblock dword(memblock,8)
   if x>-1 and y>-1 and x<width and y<height
      pointer=y*width*depth/8+x*depth/8+12
      write memblock dword memblock,pointer,color
   endif
endfunction
 
function get_memblock_pixel(memblock,x,y)
   width=memblock dword(memblock,0)
   height=memblock dword(memblock,4)
   depth=memblock dword(memblock,8)
   if x>-1 and y>-1 and x<width and y<height
      pointer=y*width*depth/8+x*depth/8+12
      value=memblock dword(memblock,pointer)
   endif
endfunction value
 
function set_locked_pixel(x,y,color_value)
   start=get pixels pointer()
   repeat_number=get pixels pitch()
   bits_per_pixel=bitmap depth(num)/8
   pointer=start+y*repeat_number+x*bits_per_pixel
   *pointer=color_value
endfunction
 
DATA -16777216,-16316665,-15527149,-15922164,-16316410,-15658222,-14869218,-15396076,-16382713,-16776959,-16776960,-16777215,-16645886,-16777215,-16776960,-16777216
DATA -16777216,-15592942,-9474193,-14869476,-16513531,-15987187,-15592684,-15659761,-15793144,-16383486,-16711680,-16777216,-16777216,-16777216,-16777216,-16777216
DATA -16777216,-16119286,-15000804,-15527149,-16316665,-16316664,-16382202,-15530744,-9501146,-15203318,-16579837,-16645629,-16710911,-16711167,-16711423,-16777216
DATA -16777215,-16711680,-16579836,-15987444,-15395307,-15461358,-15988213,-15792631,-14612719,-15135470,-15593454,-15856628,-15724016,-15395564,-16119799,-16711422
DATA -16382970,-16645887,-16448251,-15264234,-14013910,-14014167,-15001318,-15856114,-15922161,-15198440,-14606560,-15263722,-14606048,-12303294,-14869987,-15725551
DATA -15988467,-16645375,-16579579,-15395563,-14013654,-13421773,-14146010,-15263977,-15593454,-15132648,-14868963,-15198186,-15066855,-14803683,-14476254,-13557455
DATA -16185847,-16645886,-16514045,-15987187,-14934755,-14014166,-14146009,-15001062,-15592428,-15198182,-14803426,-15198185,-15855857,-16053749,-15594223,-15397356
DATA -16382461,-15790077,-15856380,-16053237,-15658220,-15066596,-15001061,-15461355,-15592939,-14803682,-13882582,-14343132,-15527149,-16251129,-16448507,-16514301
DATA -15395833,-13290744,-14935290,-15987702,-15790061,-15790318,-15921905,-15987444,-15658735,-14737632,-13685202,-13553616,-14935269,-15987444,-16316921,-16513787
DATA -14474726,-14211824,-15198711,-16185336,-16119542,-15987956,-15987957,-15790578,-15066854,-14211290,-14145238,-14408923,-14671585,-15066598,-15658478,-15526892
DATA -12960711,-15198444,-16250616,-16514044,-16447482,-15790065,-15000805,-15000548,-14211545,-12566977,-13817043,-15198441,-14737890,-14079446,-15197927,-14605791
DATA -15263721,-16053492,-16316921,-16579323,-16447481,-15592686,-14145755,-14606048,-14408411,-12829381,-14013911,-15329513,-15263974,-14935264,-15592938,-15592430
DATA -16711166,-16711424,-14606046,-15461613,-16185079,-15856114,-15395307,-15395308,-15330027,-14803684,-14540253,-14211546,-13948625,-15455823,-15394523,-16381945
DATA -16777216,-16777215,-10921639,-14606304,-16053493,-16250873,-16184566,-16119543,-16119800,-15922162,-15066341,-13356236,-12500923,-12170916,-14539472,-16382201
DATA -16777216,-16777216,-14145753,-15329769,-16185079,-16250616,-16184565,-16250872,-16448508,-16382714,-15921907,-14935013,-13290443,-11711155,-14606047,-16448251
DATA -16777216,-16777216,-16316923,-16382714,-16316666,-15855857,-15461099,-15724784,-16448251,-16580605,-16579838,-16316666,-15724270,-15197928,-15987444,-16645887
 
DATA -536462,-7679992,-15684847,-15690223,-9395701,-9402101,-8164061,-8171997,-8095918,-6645352,-3947582,-1381913
 
DATA -16777216,-16777216,-16777216,-16777216,-197381,-1835773,-16777216,-16777216
DATA -16777216,-16777216,-16777216,-16777216,-197381,-16777216,-16777216,-16777216
DATA -16777216,-16777216,-16777216,-197381,-1835773,-16777216,-16777216,-16777216
DATA -16777216,-16777216,-16777216,-1835773,-16777216,-16777216,-16777216,-16777216
DATA -16777216,-16777216,-16777216,-197381,-1835773,-16777216,-16777216,-16777216
DATA -16777216,-16777216,-16777216,-1835773,-16777216,-16777216,-16777216,-16777216
DATA -16777216,-16777216,-16777216,-1835773,-16777216,-16777216,-16777216,-16777216
DATA -16777216,-16777216,-16777216,-1835773,-16777216,-16777216,-16777216,-16777216
DATA -16777216,-16777216,-1835773,-197381,-16777216,-16777216,-16777216,-16777216
DATA -16777216,-16777216,-197381,-197381,-16777216,-16777216,-16777216,-16777216
DATA -16777216,-16777216,-1835773,-1835773,-16777216,-16777216,-16777216,-16777216
DATA -16777216,-16777216,-16777216,-1835773,-16777216,-16777216,-16777216,-16777216
DATA -16777216,-16777216,-16777216,-1835773,-1835773,-16777216,-16777216,-16777216
DATA -16777216,-16777216,-16777216,-16777216,-1835773,-1835773,-16777216,-16777216
DATA -16777216,-16777216,-16777216,-16777216,-197381,-1835773,-16777216,-16777216
DATA -16777216,-16777216,-16777216,-16777216,-197381,-1835773,-16777216,-16777216
DATA -16777216,-16777216,-16777216,-16777216,-197381,-1835773,-16777216,-16777216
DATA -16777216,-16777216,-16777216,-16777216,-197381,-1835773,-16777216,-16777216
DATA -16777216,-16777216,-16777216,-16777216,-1835773,-16777216,-16777216,-16777216
DATA -16777216,-16777216,-16777216,-16777216,-1835773,-16777216,-16777216,-16777216
DATA -16777216,-16777216,-1835773,-1835773,-1835773,-16777216,-16777216,-16777216
DATA -16777216,-16777216,-197381,-16777216,-1835773,-16777216,-1835773,-1835773
DATA -16777216,-16777216,-197381,-16777216,-1835773,-197381,-1835773,-16777216
DATA -16777216,-16777216,-197381,-16777216,-16777216,-197381,-1835773,-16777216
DATA -16777216,-16777216,-1835773,-16777216,-16777216,-1835773,-1835773,-16777216
DATA -16777216,-16777216,-1835773,-16777216,-16777216,-16777216,-1835773,-16777216
DATA -16777216,-16777216,-197381,-1835773,-16777216,-16777216,-1835773,-16777216
DATA -16777216,-16777216,-16777216,-1835773,-16777216,-16777216,-16777216,-16777216
DATA -16777216,-16777216,-16777216,-197381,-16777216,-16777216,-16777216,-16777216
DATA -16777216,-16777216,-16777216,-1835773,-1835773,-16777216,-16777216,-16777216
DATA -16777216,-16777216,-16777216,-16777216,-197381,-16777216,-16777216,-16777216
DATA -16777216,-16777216,-16777216,-16777216,-197381,-16777216,-16777216,-16777216
DATA -16777216,-16777216,-16777216,-16777216,-197381,-16777216,-16777216,-16777216
DATA -16777216,-16777216,-16777216,-16777216,-197381,-16777216,-16777216,-16777216
DATA -16777216,-16777216,-16777216,-16777216,-197381,-16777216,-16777216,-16777216
DATA -16777216,-16777216,-16777216,-1835773,-197381,-16777216,-16777216,-16777216
DATA -16777216,-16777216,-16777216,-197381,-197381,-16777216,-16777216,-16777216
DATA -16777216,-16777216,-16777216,-197381,-197381,-16777216,-16777216,-16777216
DATA -16777216,-16777216,-16777216,-1835773,-197381,-16777216,-16777216,-16777216
DATA -16777216,-16777216,-197381,-1835773,-1835773,-1835773,-16777216,-16777216
DATA -16777216,-16777216,-197381,-1835773,-16777216,-197381,-16777216,-16777216
DATA -16777216,-16777216,-197381,-16777216,-16777216,-197381,-16777216,-16777216
DATA -16777216,-16777216,-197381,-16777216,-16777216,-197381,-16777216,-16777216
DATA -16777216,-197381,-197381,-16777216,-16777216,-197381,-16777216,-16777216
DATA -16777216,-1835773,-16777216,-16777216,-16777216,-197381,-16777216,-16777216
DATA -16777216,-1835773,-16777216,-16777216,-16777216,-197381,-16777216,-16777216
DATA -1835773,-1835773,-16777216,-16777216,-16777216,-197381,-1835773,-16777216
DATA -16777216,-16777216,-16777216,-16777216,-16777216,-197381,-1835773,-16777216
DATA -16777216,-16777216,-16777216,-16777216,-16777216,-197381,-1835773,-16777216
DATA -16777216,-16777216,-16777216,-16777216,-16777216,-1835773,-16777216,-16777216
DATA -16777216,-16777216,-16777216,-16777216,-16777216,-1835773,-16777216,-16777216
DATA -16777216,-16777216,-16777216,-16777216,-16777216,-1835773,-16777216,-16777216
DATA -16777216,-16777216,-16777216,-16777216,-1835773,-1835773,-16777216,-16777216
DATA -16777216,-16777216,-16777216,-16777216,-1835773,-16777216,-16777216,-16777216
DATA -16777216,-16777216,-16777216,-1835773,-1835773,-1835773,-16777216,-16777216
DATA -16777216,-16777216,-1835773,-1835773,-16777216,-1835773,-16777216,-16777216
DATA -16777216,-16777216,-197381,-197381,-16777216,-1835773,-16777216,-16777216
DATA -16777216,-16777216,-197381,-197381,-16777216,-1835773,-1835773,-16777216
DATA -16777216,-16777216,-197381,-197381,-16777216,-16777216,-1835773,-16777216
DATA -16777216,-16777216,-197381,-197381,-16777216,-16777216,-1835773,-1835773
DATA -16777216,-1835773,-1835773,-1835773,-1835773,-16777216,-16777216,-1835773
DATA -16777216,-1835773,-16777216,-16777216,-1835773,-16777216,-16777216,-16777216
DATA -1835773,-1835773,-16777216,-1835773,-1835773,-16777216,-16777216,-16777216
DATA -1835773,-16777216,-16777216,-197381,-197381,-16777216,-16777216,-16777216