
' Frogger revisited
' http://www.freebasic.net/forum/
' sounds by Wilfried Nass < wilfried.nass@gmail.com >
' http://www.eschecs.fr/

#include "fbgfx.bi"
#include "audio.bi"
#include "colors.bi"

using fb

screenres 372, 416, 32,, 4

type sprite
  x  as integer
  y  as integer
  dx as integer
  dy as integer
  w  as integer
  h  as integer
  s  as integer
  a  as single
  ta as integer
  j  as single
end type

#include "rotozoom.bas"

function scollision(s1 as sprite, s2 as sprite) as integer
  dim as integer hit
  hit = 0
  if s1.x >= s2.x and s1.x <= s2.x + s2.w then
    if s1.y >= s2.y and s1.y <= s2.y + s2.h then
      hit = 1
    end if
    if s1.y + s1.h >= s2.y and s1.y + s1.h <= s2.y+s2.h then
      hit = 2
    end if
    if s1.y <= s2.y and s1.y + s1.h >= s2.y + s2.h then 'overlap
      hit = 3
    end if
  end if
  if s1.x + s1.w >= s2.x and s1.x + s1.w <= s2.x + s2.w then
    if s1.y >= s2.y and s1.y <= s2.y + s2.h then
      hit = 4
    end if
    if s1.y + s1.h >= s2.y and s1.y + s1.h <= s2.y+s2.h then
      hit = 5
    end if
    if s1.y <= s2.y and s1.y + s1.h >= s2.y + s2.h then
      hit = 6
    end if
  end if
  return hit
end function

dim shared frog as sprite
dim shared car(1 to 4) as sprite
dim shared croc(1 to 4) as sprite

dim as string text

dim as FB.Image ptr iFrog = imagecreate(21, 23, 0)
for j as integer = 0 to 22
  read text
  for i as integer = 0 to 20
    if mid(text, i + 1, 1) = "P" then
      pset(i, j), &HFFFF00FF
    end if
    if mid(text, i + 1, 1) = "B" then
      pset(i, j), &HFF000000
    end if
    if mid(text, i + 1, 1) = "G" then
      pset(i, j), &HFF00FF00
    end if
    if mid(text, i + 1, 1) = "Y" then
      pset(i, j), &HFFFFC90E
    end if
  next i
next j
get (0, 0)-(20, 22), iFrog

dim as FB.Image ptr dFrog = imagecreate(21, 23, 0)
for j as integer = 0 to 22
  for i as integer = 0 to 20
    if point(i, j) = &HFF00FF00 then
      pset(i, j), Pear
    end if
    if point(i, j) = &HFFFFC90E then
      pset(i, j), Carmine 
    end if
  next i
next j
get (0, 0)-(20, 22), dFrog

dim as FB.Image ptr iCar1 = imagecreate(40, 20, 0)
for j as integer = 0 to 19
  read text
  for i as integer = 0 to 39
    if mid(text, i + 1, 1) = "P" then
      pset(i, j), &HFFFF00FF
    end if
    if mid(text, i + 1, 1) = "B" then
      pset (i, j), &HFF000000
    end if
    if mid(text, i + 1, 1) = "W" then
      pset (i, j), PowderBlue
    end if
    if mid(text, i + 1, 1) = "R" then
      pset (i, j), &HFFED1C24
    end if
  next i
next j
get (0, 0)-(39, 19), iCar1

dim as FB.Image ptr iCar2 = imagecreate(40, 20, 0)
dim as integer k, v
for j as integer = 0 to 19
  for i as integer = 0 to 19
    v = point(i, j)
    pset(i, j), point(39 - i, j)
    pset(39 - i, j), v
  next i
next j
get (0, 0)-(39, 19), iCar2

dim as FB.Image ptr iCroc1 = imagecreate(80, 20, 0)
for i as integer = 0 to 79
  read text
  for j as integer = 0 to 19
    if mid(text, j + 1, 1) = "P" then
      pset (i, j), &HFFFF00FF
    end if
    if mid(text, j + 1, 1) = "B" then
      pset (i, j), &HFF000000
    end if
    if mid(text, j + 1, 1) = "G" then
      pset(i, j), &HFF22B14C
    end if
    if mid(text, j + 1, 1) = "Y" then
      pset(i, j), &HFFFFC90E
    end if
    if mid(text, j + 1, 1) = "X" then
      pset(i, j), &HFF3F48CC
    end if
  next j
next i
get (0, 0)-(79, 19), iCroc1

dim as FB.Image ptr iCroc2 = imagecreate(80, 20, 0)
for j as integer = 0 to 19
  for i as integer = 0 to 39
    v = point(i, j)
    pset(i, j), point(79 - i, j)
    pset(79 - i, j), v
  next i
next j
get (0, 0)-(79, 19), iCroc2

dim as FB.Image ptr iCrocA1 = imagecreate(80, 20, 0)
for i as integer = 0 to 79
  read text
  for j as integer = 0 to 19
    if mid(text, j + 1, 1) = "P" then
      pset (i, j), &HFFFF00FF
    end if
    if mid(text, j + 1, 1) = "B" then
      pset (i, j), &HFF000000
    end if
    if mid(text, j + 1, 1) = "G" then
      pset(i, j), &HFF22B14C
    end if
    if mid(text, j + 1, 1) = "Y" then
      pset(i, j), &HFFFFC90E
    end if
    if mid(text, j + 1, 1) = "X" then
      pset(i, j), &HFF3F48CC
    end if
  next j
next i
get (0, 0)-(79, 19), iCrocA1

dim as FB.Image ptr iCrocA2 = imagecreate(80, 20, 0)
for j as integer = 0 to 19
    for i as integer = 0 to 39
        v = point(i, j)
        pset(i, j), point(79 - i, j)
        pset(79 - i, j), v
    next i
next j
get (0, 0)-(79, 19), iCrocA2

line (0,000)-(371,031), DarkOrange, bf
line (0,032)-(371,063), ForestGreen, bf
line (0,064)-(371,191), Emerald, bf
line (0,192)-(371,223), ForestGreen, bf
line (0,224)-(371,351), GrayAsparagus, bf
line (0,352)-(371,383), ForestGreen, bf
line (0,384)-(371,415), DarkOrange, bf

for i as integer = 0 to 5
  circle (i*62+31,47),12, Maroon,,,,f
next i

line (0,256)-(371,256), Goldenrod
line (0,288)-(371,288), Goldenrod
line (0,320)-(371,320), Goldenrod

color Black
draw string (138,12), "FROGGER GAME"

dim as FB.Image ptr backGround = imagecreate(372, 416, 0)
get (0,0)-(371,415), backGround

dim as string reply

FB_MCI_open "SoundFiles\Croak.wav",  "C"
FB_MCI_open "SoundFiles\Finish.wav", "F"
FB_MCI_open "SoundFiles\Hop.wav",    "H"
FB_MCI_open "SoundFiles\Start.wav",  "S"

dim as integer nC, nF, nH

do
  
  nC = 0 : nF = 0 : nH =0
  FB_MCI("play", "S")
  
  reply = ""
  
  frog.x = 170
  frog.y = 357
  frog.w = 21
  frog.h = 23
  frog.s = 32
  
  car(1).x = 0
  car(1).y = 230
  car(1).dx = 1
  car(1).dy = 0
  car(1).w = 40
  car(1).h = 20
  
  car(2).x = 300
  car(2).y = 262
  car(2).dx = 1
  car(2).dy = 0
  car(2).w = 40
  car(2).h = 20
  
  car(3).x = 150
  car(3).y = 294
  car(3).dx = 1
  car(3).dy = 0
  car(3).w = 40
  car(3).h = 20
  
  car(4).x = 30
  car(4).y = 326
  car(4).dx = 1
  car(4).dy = 0
  car(4).w = 40
  car(4).h = 20
  
  croc(1).x = 0
  croc(1).y = 72
  croc(1).dx = 1
  croc(1).dy = 0
  croc(1).w = 60
  croc(1).h = 20
  
  croc(2).x = 280
  croc(2).y = 104
  croc(2).dx = 1
  croc(2).dy = 0
  croc(2).w = 60
  croc(2).h = 20
  
  croc(3).x = 150
  croc(3).y = 136
  croc(3).dx = 1
  croc(3).dy = 0
  croc(3).w = 60
  croc(3).h = 20
  
  croc(4).x = 30
  croc(4).y = 168
  croc(4).dx = 1
  croc(4).dy = 0
  croc(4).w = 60
  croc(4).h = 20
  
  dim as integer chosenLog
  chosenLog = 0
  
  dim as double now
  now = 0

  do
    
    screenlock()
    cls
    put (0, 0), backGround, pset

    for i as integer = 1 to 4
      if croc(i).dx < 0 then
        if chosenLog = i then
          put (croc(i).x,croc(i).y), iCroc2, trans
          'put (croc(i).x,croc(i).y), iCrocA2, trans
        else
          put (croc(i).x,croc(i).y), iCroc2, trans
        end if
      else
        if chosenLog = i then
          put (croc(i).x,croc(i).y), iCroc1, trans
          'put (croc(i).x,croc(i).y), iCrocA1, trans
        else
          put (croc(i).x,croc(i).y), iCroc1, trans
        end if
      end if
    next i
    
    if frog.s = 0 then
      rotozoom(, dFrog, frog.x + dFrog -> Width \ 2, _
      frog.y + dFrog -> Height \ 2, int(frog.a), frog.j, frog.j)
    else
      rotozoom(, iFrog, frog.x + iFrog -> Width \ 2, _
      frog.y + iFrog -> Height \ 2, int(frog.a), frog.j, frog.j)
    end if

    for i as integer = 1 to 4
      if car(i).dx < 0 then
        put(car(i).x, car(i).y), iCar2, trans
      else
        put(car(i).x, car(i).y), iCar1, trans
      end if
    next i
    if frog.s = 0 then
      draw string(150,364), "FROG DEAD"
      if nC = 0 then
        FB_MCI("play", "C")
        nC = 1
      end if
    end if
    if frog.y < 64 then
      draw string(150,364), "FROG HOME"
      if nF = 0 then
        FB_MCI("play", "F")
        nF = 1
      end if
    end if
    
    draw string(12,396), "Hit SPACE to start again ESC to end program"
    
    screenunlock()
    
    for i as integer = 1 to 4
      car(i).x = car(i).x + car(i).dx
    next i

    for i as integer = 1 to 4
      croc(i).x = croc(i).x + croc(i).dx
      if chosenLog = i then
        frog.x = frog.x + croc(i).dx
      end if
    next i

    for i as integer = 1 to 4
      if car(i).x < 1 or car(i).x > 330 then car(i).dx = - car(i).dx
    next i

    for i as integer = 1 to 4
      if croc(i).x < 1 or croc(i).x > 290 then croc(i).dx = - croc(i).dx
    next i

    frog.a += (frog.ta - frog.a) / 5
    frog.j -= .1
    if frog.j < 1 then frog.j = 1

    if timer > (now + 0.25) then

      if multikey(SC_SPACE) then reply = "y"
      if multikey(SC_ESCAPE) then reply = "x"
      if inkey = chr(255)&"k" then reply = "x"

      if frog.y > 63 then
        
        if multikey(SC_DOWN) andalso frog.y <352 then
          FB_MCI("play", "H")
          frog.y = frog.y + frog.s
          frog.ta = 180
          frog.j = 1.5
          now = timer
          chosenLog = 0
        end if
        if multikey(SC_UP)  then
          FB_MCI("play", "H")
          if frog.ta = 270 then
            frog.a = -90
          end if
          frog.y = frog.y - frog.s
          frog.ta = 0
          frog.j = 1.5
          now = timer
          chosenLog = 0
        end if
        if multikey(SC_RIGHT) andalso frog.x < 302 then
          FB_MCI("play", "H")
          if frog.ta = 0 then
            frog.a = 360
          end if
          frog.x = frog.x + frog.s
          frog.ta = 270
          frog.j = 1.5
          now = timer
          chosenLog = 0
        end if
        if multikey(SC_LEFT) andalso  frog.x > 10  then
          FB_MCI("play", "H")
          frog.x = frog.x - frog.s
          frog.ta = 90
          frog.j = 1.5
          now = timer   
          chosenLog = 0
        end if
          
      end if

    end if

    dim as integer hit
    
    if frog.y >= 224 and frog.y < 352 then
      hit = 0 
      for i as integer = 1 to 4
        if hit = 0 then
          hit = scollision(frog, car(i))
        end if
      next i
      if hit <> 0 then
        frog.s = 0
      end if
    end if
    
    if frog.y >= 64 and frog.y < 192 then
      hit = 0
      for i as integer = 1 to 4
        hit = scollision(frog, croc(i))
        if (hit <> 0) and (chosenLog = 0) and (frog.s <> 0) then
          chosenLog = i
        end if
      next i
      if  chosenLog = 0 then frog.s = 0
    end if
    
    sleep 10, 1
    
  loop while reply <> "y" and reply <> "x"
  
loop while reply = "y"

FB_MCI("close", "C")
FB_MCI("close", "F")
FB_MCI("close", "H")
FB_MCI("close", "S")

end

data "PPPPPPPPPBBBPPPPPPPPP"
data "PPPPPBBBBGGGBBBBPPPPP"
data "PPPPBYBBYBGBYBBYBPPPP"
data "PPPPBYBBYBGBYBBYBPPPP"
data "PBBPBYYYYBGBYYYYBPBBP"
data "BGGBPBBBBGGGBBBBPBGGB"
data "PBGGBBGGGGGGGGGBBGGBP"
data "BGGGGBBGGGBGGGBBGGGGB"
data "PBGGGBBBBGBGBBBBGGGBP"
data "BGGGGGBGGGBGGGBGGGGGB"
data "PBBBGBGGGGGGGGGBGBBBP"
data "PPPPBBGGGGBGGGGBBPPPP"
data "PPPPBGGGGGBGGGGGBPPPP"
data "PPPPBGGGGGBGGGGGBPPPP"
data "PBBBBGGGGGBGGGGGBBBBP"
data "PBGGGBGGGGBGGGGBGGGBP"
data "PBGGGGBGGGBGGGBGGGGBP"
data "PBBGGGBGGGBGGGBGGGBBP"
data "PPBGBGGBGGBGGBGGBGBPP"
data "PBBBGGGBGGGGGBGGGBBBP"
data "PBGGGBBGBGGGBGBBGGGBP"
data "PBBBGGBBBGGGBBBGGBBBP"
data "PPPPBBBPPBBBPPBBBPPPP"

data "PPPPPBBBBBBBBBBBBBBBBBBBBBPPPPPPPPPPPPPP"
data "PPPPBRRRRRRRRRRRRRRRRRRRBWBPPPPPPPPPPPPP"
data "PPPBBRRRRRRRRRRRRRRRRRRRBWWBBPPPPPPPPPPP"
data "PPBWBRRRRRRRRRRRRRRRRRRRBWWWWBPPPPPPPPPP"
data "PBBWBRRRRRRRRRRRRRRRRRRRBWWWWWBBBBBBBBBB"
data "BRBWBRRRRRRRRRRRRRRRRRRRBWWWWWWBRRRRRRRB"
data "BRBWBRRRRRRRRRRRRRRRRRRRBWWWWWWBRRRRRRRB"
data "BRBWBBBBBBBBBBBBBBBBBBBBBBWWWWWBRRRRRRRB"
data "BRBWBWWWWWWWWWWBWWWWWWWWBBWWWWWBRRRRRBRB"
data "BRBWBWWWWWWWWWWBWWWWWWWWBWBWWWWBRRRRRRRB"
data "BRBWBWWWWWWWWWWBWWWWWWWWBWWBBWWBRRRRRRRB"
data "BRBWBWWWWWWWWWWBWWWWWWWWBWWWWBWBRRRRRRRB"
data "BRBWBWWWWWWWWWWBWWWWWWWWBWWWWWBBRRRRRRRB"
data "BRBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"
data "BRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRB"
data "BRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRB"
data "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"
data "PBBBBBBBBPPPPPPPPPPPPPPPPPPPPPPBBBBBBBBB"
data "PPBBBBBBPPPPPPPPPPPPPPPPPPPPPPPPBBBBBBBP"
data "PPPBBBBPPPPPPPPPPPPPPPPPPPPPPPPPPBBBBBPP"

data "PPPPPPPPPPPPPPBBXXBX"
data "PPPPPPPPPPPPPBBGXXBP"
data "PPPPPPPPPPPPPBBGGXBP"
data "PPPPPPPPPPPPPPBGGXBP"
data "PPPPPPPPPPPPPBBGXXBX"
data "PPPPPPPPPPPPPBBGXXBP"
data "PPPPPPPPPPPPPPBGXGPP"
data "PPPPPPPPPPPPPBBGXXPX"
data "PPPPPPPPPPPPBBGGXXGX"
data "PPPPPPPPPPPPPBBGXXBX"
data "PPPPPPPPPPPPPPBGXXXX"
data "PPPPPPPPPPPPBBBGGXXP"
data "PPPPPPPPPPPPBGGGGXBP"
data "PPPPPPPPPPPPBBGGGXBP"
data "PPPPPPPPPPPPPBBGGXBP"
data "PPPPPPPPPPPPPBGGGXBP"
data "PPPPPPPPPPPPBBGGGGXP"
data "PPPPPPPPPPPPBBGGBGXB"
data "PPPPPPPPPPPPPBGBBGXX"
data "PPPPPPPPPPPPBBGBGGBX"
data "PPPPPPPPPPPPBGGGGGBX"
data "PPPPPPPPPPPPBGGBGGPX"
data "PPPPPPPPPPPBBGGBGGGX"
data "PPPPPPPPPPBBGGGGGGGX"
data "PPPPPPPPPPBGGGGGGXGP"
data "PPPPPPPPPPBGGGGGGXGP"
data "PPPPPPPPPPBGGGGBGXGP"
data "PPPPPPPPPBBGGGGBGXGP"
data "PPPPPPPPBBGGGGGBGXGP"
data "PPPPPPPPBGGGGGBBGXGP"
data "PPPPPPPPBGGGGGBGGXGX"
data "PPPPPPPBBGGGGGBGGGGX"
data "PPPPPPBBGGGBGGBBGGGX"
data "PPPPPPBGGGBBGGGBGGGP"
data "PPPPPPBBGGGBGGGBGGGP"
data "PPPPPPPBGGBBGGGBGBGP"
data "PPPPPPBBGGBBGGGBGBGP"
data "PPPPPBBGGGGBGGBGBBGX"
data "PPPPPBGGGGGGGGBGBGGX"
data "PPPPPBBGGGGGGGBGBGGX"
data "PPPPPPBGGGGGGGBBGGBX"
data "PPPPPBBGGGBGGGBBGGBX"
data "PPPPPBGGGGGGGGBGGGBX"
data "PPPPBBGGGGGGGBBGGGXP"
data "PPPPBBGGGGGGGBGGGGXP"
data "PPPPPBGGGGGGBBGGGGXP"
data "PPPPPBGGGBGGBGGGGGXP"
data "PPPPPBBGGGGGBGGGGGXP"
data "PPPPPPBGGGGGGGBGGGPP"
data "PPPPPBBGGGGGGBBGGGPX"
data "PPPPBBGGGBGGGGBGGGPX"
data "PPPPBBGGBBGGGGBGBGXX"
data "PPPPPBGGBGGGGBBGGBXX"
data "PPPPPBGGGGGGGBBGGBXX"
data "PPPPPBGGGGGGGBGGGBXX"
data "PPPPBBGGGBGBGBGGGBXX"
data "PPPPBGGGGBGBGBGGGXXX"
data "PPBBBGGGGGGGGBBGGXXX"
data "PBGGGGBBGGGGGBBGGXPX"
data "BGYYYYYBGGGGGGBGGXPX"
data "BGYBBYYBGGGGGGBGGGPX"
data "BGYBBYYBGGGGGGBGGGXX"
data "PBGGGBBGGGGGGGBBGGXX"
data "PPBBBBBBGGGGGGBBBGXX"
data "PPPPPPPBGGGGGBGBBGXX"
data "PPPPPPPPBGGGGBBBBGXX"
data "PPPPPPPPBGGGGBBBGGXX"
data "PPPPPPPPPBGGGGBBGGPP"
data "PPPPPPPPPPBGGGBBGGXP"
data "PPPPPPPPPPBGGGBBGGXP"
data "PPPPPPPPPPBGGGBBGGXX"
data "PPPPPPPPPPBGGGBBGGXP"
data "PPPPPPPPPPBGGGBBGXXP"
data "PPPPPPPPPPBGGGBBGXXP"
data "PPPPPPPPPBBGGGBBXXXP"
data "PPPPPPPPBGGGGGBBXXPX"
data "PPPPPPPBGBBGGGBBXXPX"
data "PPPPPPPBGBBBGGBBXXPX"
data "PPPPPPPPBGGGGBBBXXPX"
data "PPPPPPPPPBBBBBBXXPPX"

data "PPPPPPPPPPPPPPBBXXBX"
data "PPPPPPPPPPPPPBBGXXBP"
data "PPPPPPPPPPPPPBBGGXBP"
data "PPPPPPPPPPPPPPBGGXBP"
data "PPPPPPPPPPPPPBBGXXBX"
data "PPPPPPPPPPPPPBBGXXBP"
data "PPPPPPPPPPPPPPBGXGPP"
data "PPPPPPPPPPPPPBBGXXPX"
data "PPPPPPPPPPPPBBGGXXGX"
data "PPPPPPPPPPPPPBBGXXBX"
data "PPPPPPPPPPPPPPBGXXXX"
data "PPPPPPPPPPPPBBBGGXXP"
data "PPPPPPPPPPPPBGGGGXBP"
data "PPPPPPPPPPPPBBGGGXBP"
data "PPPPPPPPPPPPPBBGGXBP"
data "PPPPPPPPPPPPPBGGGXBP"
data "PPPPPPPPPPPPBBGGGGXP"
data "PPPPPPPPPPPPBBGGBGXB"
data "PPPPPPPPPPPPPBGBBGXX"
data "PPPPPPPPPPPPBBGBGGBX"
data "PPPPPPPPPPPPBGGGGGBX"
data "PPPPPPPPPPPPBGGBGGPX"
data "PPPPPPPPPPPBBGGBGGGX"
data "PPPPPPPPPPBBGGGGGGGX"
data "PPPPPPPPPPBGGGGGGXGP"
data "PPPPPPPPPPBGGGGGGXGP"
data "PPPPPPPPPPBGGGGBGXGP"
data "PPPPPPPPPBBGGGGBGXGP"
data "PPPPPPPPBBGGGGGBGXGP"
data "PPPPPPPPBGGGGGBBGXGP"
data "PPPPPPPPBGGGGGBGGXGX"
data "PPPPPPPBBGGGGGBGGGGX"
data "PPPPPPBBGGGBGGBBGGGX"
data "PPPPPPBGGGBBGGGBGGGP"
data "PPPPPPBBGGGBGGGBGGGP"
data "PPPPPPPBGGBBGGGBGBGP"
data "PPPPPPBBGGBBGGGBGBGP"
data "PPPPPBBGGGGBGGBGBBGX"
data "PPPPPBGGGGGGGGBGBGGX"
data "PPPPPBBGGGGGGGBGBGGX"
data "PPPPPPBGGGGGGGBBGGBX"
data "PPPPPBBGGGBGGGBBGGBX"
data "PPPPPBGGGGGGGGBGGGBX"
data "PPPPBBGGGGGGGBBGGGXP"
data "PPPPBBGGGGGGGBGGGGXP"
data "PPPPPBGGGGGGBBGGGGXP"
data "PPPPPBGGGBGGBGGGGGXP"
data "PPPPPBBGGGGGBGGGGGXP"
data "PPPPPPBGGGGGGGBGGGPP"
data "PPPPPBBGGGGGGBBGGGPX"
data "PPPPBBGGGBGGGGBGGGPX"
data "PPPPBBGGBBGGGGBGBGXX"
data "PPPPPBGGBGGGGBBGGBXX"
data "PPPPPBGGGGGGGBBGGBXX"
data "PPPPPBGGGGGGGBGGGBXX"
data "PPPPBBGGGBGBGBGGGBXX"
data "PPPPBGGGGBGBGBGGGXXX"
data "PPBBBGGGGGGGGBBGGXXX"
data "PBGGGGBBGGGGGBBGGXPX"
data "BGYYYYYBGGGGGGBGGXPX"
data "BGYBBYYBGGGGGGBGGGPX"
data "BGYBBYYBGGGGGGBGGGXX"
data "PBGGGBBGGGGGGGBBGGXX"
data "PPBBBBBBGGGGGGBBBGXX"
data "PPPPPPBGGGGGGGGBBGXX"
data "PPPPPPBGBGBBBGGBBGXX"
data "PPPPPBGGBBBPBBBBGGXX"
data "PPPPPBGBBBPPPPBBGGPP"
data "PPPPPBGBWWBPPPBBGGXP"
data "PPPPPBGBBBPPPBBBGGXP"
data "PPPPBGGBPPPPBWWBGGXX"
data "PPPPBGGBBBPPPBBBGGXP"
data "PPPPBGGBWWBPPPPBGXXP"
data "PPPPBGGBBBPPPBBBGXXP"
data "PPPBGGGBPPPPBWWBXXXP"
data "PPBBGGGBBBPPPBBBXXPX"
data "PBGGGGGBWWBPPPPBXXPX"
data "BGBBGGGBBBPPPBBBXXPX"
data "BGBBBGGBPPPPBWWBXXPX"
data "PBGGGGBBPPPPPBBXXPPX"
' END