#define W 20
#define H -20

// Player start pos is y=8 x=8
/*
xxxxxxxxxxxxxxxxxx
x                x
x                x
x                x
x      +-+       x
x     ++ | +--+  x
x    ++  +-+  |  x
x   ++ $      |  x
x   +   @$ #  |  x
x   +-+ $###  |  x
x     |  #..  |  x
x    ++ ##.# ++  x
x    |      ++   x
x    |     ++    x
x    +-----+     x
x                x
x                x
xxxxxxxxxxxxxxxxxx
 */
#undef IN_ROM

#ifdef LINUX
#define IN_ROM 
#else
#define IN_ROM __attribute__ ((section(".text;")))
#endif

// correction: 4, -3
const int wall0[] IN_ROM = {
   1, 80+3, -30+6,

  -1, 0, W*2,
  -1, H*2, 0,
  -1, 0, W*2,
  -1, H*-1, 0,
  -1, 0, W*3,
  -1, H*6, 0,
  -1, 0, W*-1,
  -1, H*1, 0,
  -1, 0, W*-1,
  -1, H*1, 0,
  -1, 0, W*-1,
  -1, H*1, 0,

   1, -73, 29+10,

  -1, 0, W*-6,
  -1, H*-3, 0,
  -1, 0, W*1,
  -1, H*-2, 0,
  -1, 0, W*-2,
  -1, H*-1, 0,
  -1, H*-1, 0,
  -1, 0, W*1,
  -1, H*-1, 0,
  -1, 0, W*1,
  -1, H*-1, 0,
  -1, 0, W*1,
  -1, H*-1, 0, // added manually
  2,
};

// Player start pos is y=9 x=9
/*
xxxxxxxxxxxxxxxxxx
x                x
x                x
x                x
x                x
x        +---+   x
x       ++ . |   x
x      ++ $. |   x
x     ++ $   |   x
x    ++ $@ +-+   x
x    | $  ++     x
x    |.. ++      x
x    |   |       x
x    +---+       x
x                x
x                x
x                x
xxxxxxxxxxxxxxxxxx
 */
// correction: 5, -4
const int wall1[] = {
   1, 80+3-15, -30+34,

  -1, 0, W*4,
  -1, H*4, 0,
  -1, 0, W*-2,
  -1, H*1, 0,
  -1, 0, W*-1,
  -1, H*1, 0,
  -1, 0, W*-1,
  -1, H*2, 0,
  -1, 0, W*-4,
  -1, H*-4, 0,
  -1, 0, W*1,
  -1, H*-1, 0,
  -1, 0, W*1,
  -1, H*-1, 0,
  -1, 0, W*1,
  -1, H*-1, 0,
  -1, 0, W*1,

  -1, -H, 0,

  2,
};

// Player start pos is y=12 x=7
/*
xxxxxxxxxxxxxxxxxx
x                x
x           +---+x
x          ++   |x
x          |    |x
x    +--+  | $ ++x
x    |  +--+$ $| x
x    |     $ $ | x
x   ++ ## $ $ $| x
x   |  .#  $ $ | x
x   |  .#      | x
x+--+# ###+----+ x
x|.... @  |      x
x|....    |      x
x++  +----+      x
x +--+           x
x                x
xxxxxxxxxxxxxxxxxx
 */

const int wall2[] = {
  -1, 0, W*4,
  -1, H*3, 0,
  -1, 0, W*-1,
  -1, H*6, 0,
  -1, 0, W*-5,
  -1, H*3, 0,
  -1, 0, W*-5,
  -1, H*1, 0,
  -1, 0, W*-3,
  -1, H*-1, 0,
  -1, 0, W*-1,
  -1, H*-3, 0,
  -1, 0, W*3,
  -1, H*-3, 0,
  -1, 0, W*1,
  -1, H*-3, 0,
  -1, 0, W*3,
  -1, H*1, 0,
  -1, 0, W*3,
  -1, H*-3, 0,
  -1, 0, W*1,
  2,
};

// Player start pos is y=5 x=14
/*
xxxxxxxxxxxxxxxxxx
x                x
x                x
x                x
x    +---------+ x
x    |     #  @| x
x    + $ $$#   | x
x    ++$    $$ | x
x     |  $ #   | x
x  +--+## #+---+ x
x  |.. ..$ |     x
x  | ..    |     x
x  |  ..+--+     x
x  +----+        x
x                x
x                x
x                x
xxxxxxxxxxxxxxxxxx
 */

const int wall3[] = {
  -1, 0, W*5,// *10 too big
  -1, 0, W*5,
  -1, H*5, 0,
  -1, 0, W*-4,
  -1, H*3, 0,
  -1, 0, W*-3,
  -1, H*1, 0,
  -1, 0, W*-5,
  -1, H*-4, 0,
  -1, 0, W*3,
  -1, H*-2, 0,
  -1, 0, W*-1,
  -1, H*-1, 0,
  2,
};

// Player start pos is y=9 x=9
/*
xxxxxxxxxxxxxxxxxx
x                x
x                x
x   +---------+  x
x   |.  .$.  .|  x
x   | $  $  $ |  x
x   ++ ..$.. ++  x
x    ++$#$#$++   x
x     |.$ $.|    x
x     |  @  |    x
x     |## ##|    x
x    ++ $ $ ++   x
x    |.  $  .|   x
x    +-+ . +-+   x
x      +---+     x
x                x
x                x
xxxxxxxxxxxxxxxxxx
 */

const int wall4[] = {
  -1, 0, W*5, // * 10 too big
  -1, 0, W*5,
  -1, H*3, 0,
  -1, 0, W*-1,
  -1, H*1, 0,
  -1, 0, W*-1,
  -1, H*4, 0,
  -1, 0, W*1,
  -1, H*2, 0,
  -1, 0, W*-2,
  -1, H*1, 0,
  -1, 0, W*-4,
  -1, H*-1, 0,
  -1, 0, W*-2,
  -1, H*-2, 0,
  -1, 0, W*1,
  -1, H*-4, 0,
  -1, 0, W*-1,
  -1, H*-1, 0,
  -1, 0, W*-1,
  2,
};

// Player start pos is y=8 x=4
/*
xxxxxxxxxxxxxxxxxx
x                x
x                x
x                x
x      +-----+   x
x      |     ++  x
x  +---+ ###  |  x
x  |       #  ++ x
x  |@$***. ##$ + x
x  |  #    ## .+ x
x  ++  ##  # $ + x
x   ++  ####.$.+ x
x    ++        + x
x     +----+  ++ x
x          +--+  x
x                x
x                x
xxxxxxxxxxxxxxxxxx
 */

const int wall5[] = {
  -1, 0, W*6,
  -1, H*1, 0,
  -1, 0, W*1,
  -1, H*2, 0,
  -1, 0, W*1,
  -1, H*1, 0,
  -1, H*1, 0,
  -1, H*1, 0,
  -1, H*1, 0,
  -1, H*1, 0,
  -1, H*1, 0,
  -1, 0, W*-1,
  -1, H*1, 0,
  -1, 0, W*-3,
  -1, H*-1, 0,
  -1, 0, W*-5,
  -1, H*-1, 0,
  -1, 0, W*-1,
  -1, H*-1, 0,
  -1, 0, W*-1,
  -1, H*-1, 0,
  -1, 0, W*-1,
  -1, H*-4, 0,
  -1, 0, W*4,
  2,
};

// Player start pos is y=8 x=11
/*
xxxxxxxxxxxxxxxxxx
x                x
x                x
x                x
x                x
x    +-------+   x
x    |. .    |   x
x    |.$. .  |   x
x    ++ ###@ |   x
x     |  $  ++   x
x     | $$ ++    x
x     |  $ |     x
x     |  +-+     x
x     +--+       x
x                x
x                x
x                x
xxxxxxxxxxxxxxxxxx
 */

const int wall6[] = {
  -1, 0, W*4, // *8 too big
  -1, 0, W*4,
  -1, H*4, 0,
  -1, 0, W*-1,
  -1, H*1, 0,
  -1, 0, W*-1,
  -1, H*2, 0,
  -1, 0, W*-2,
  -1, H*1, 0,
  -1, 0, W*-3,
  -1, H*-5, 0,
  -1, 0, W*-1,
  2,
};

// Player start pos is y=7 x=8
/*
xxxxxxxxxxxxxxxxxx
x                x
x                x
x                x
x                x
x     +--+       x
x   +-+  +--+    x
x   |   @   |    x
x   | #. .#.+-+  x
x   | $$$ $$$ |  x
x   +-+.#.#.# |  x
x     |       |  x
x     +--+  +-+  x
x        +--+    x
x                x
x                x
x                x
xxxxxxxxxxxxxxxxxx
 */

const int wall7[] = {
  -1, 0, W*3,
  -1, H*1, 0,
  -1, 0, W*3,
  -1, H*2, 0,
  -1, 0, W*2,
  -1, H*4, 0,
  -1, 0, W*-2,
  -1, H*1, 0,
  -1, 0, W*-3,
  -1, H*-1, 0,
  -1, 0, W*-3,
  -1, H*-2, 0,
  -1, 0, W*-2,
  -1, H*-4, 0,
  -1, 0, W*2,
  2,
};

// Player start pos is y=6 x=8
/*
xxxxxxxxxxxxxxxxxx
x                x
x     +-----+    x
x   +-+     ++   x
x   |   ###  |   x
x   |      # |   x
x  ++#$#@  # |   x
x  |   ##### |   x
x  |   #  *. |   x
x  ++$$#  *.#|   x
x   |     *..|   x
x   +--+ #...++  x
x      | #$$$ |  x
x      |   $  |  x
x      +---+  |  x
x          +--+  x
x                x
xxxxxxxxxxxxxxxxxx
 */

const int wall8[] = {
  -1, 0, W*6,
  -1, H*1, 0,
  -1, 0, W*1,
  -1, H*4, 0, // H*8 too big
  -1, H*4, 0,
  -1, 0, W*1,
  -1, H*4, 0,
  -1, 0, W*-3,
  -1, H*-1, 0,
  -1, 0, W*-4,
  -1, H*-3, 0,
  -1, 0, W*-3,
  -1, H*-2, 0,
  -1, 0, W*-1,
  -1, H*-3, 0,
  -1, 0, W*1,
  -1, H*-3, 0,
  -1, 0, W*2,
  2,
};

// Player start pos is y=9 x=8
/*
xxxxxxxxxxxxxxxxxx
x                x
x                x
x                x
x                x
x    +-----+     x
x   ++     |     x
x   |  *.$.|     x
x   |  *.#.+-+   x
x   | #$@$$  |   x
x   |   ++ # |   x
x   +---+|   |   x
x        +---+   x
x                x
x                x
x                x
x                x
xxxxxxxxxxxxxxxxxx
 */

const int wall9[] = {
  -1, 0, W*6,
  -1, H*3, 0,
  -1, 0, W*2,
  -1, H*4, 0,
  -1, 0, W*-4,
  -1, 0, W*-1,
  -1, 0, W*-4,
  -1, H*-5, 0,
  -1, 0, W*1,
  2,
};

// Player start pos is y=5 x=9
/*
xxxxxxxxxxxxxxxxxx
x                x
x                x
x                x
x       +--+     x
x       |@ |     x
x      ++  |     x
x      | .$|     x
x      |$. |     x
x    +-+..$+-+   x
x    |  ..$  |   x
x    | $ $ # |   x
x    +---+ # |   x
x        |   |   x
x        +---+   x
x                x
x                x
xxxxxxxxxxxxxxxxxx
 */

const int wall10[] = {
  -1, 0, W*3,
  -1, H*5, 0,
  -1, 0, W*2,
  -1, H*5, 0,
  -1, 0, W*-4,
  -1, H*-2, 0,
  -1, 0, W*-4,
  -1, H*-3, 0,
  -1, 0, W*2,
  -1, H*-3, 0,
  -1, 0, W*1,
  2,
};

// Player start pos is y=9 x=8
/*
xxxxxxxxxxxxxxxxxx
x                x
x                x
x                x
x                x
x         +--+   x
x         |  |   x
x    +----+$.|   x
x    |   $ $.|   x
x    | $@$...|   x
x    | $$$..++   x
x    |  $ ..|    x
x    +------+    x
x                x
x                x
x                x
x                x
xxxxxxxxxxxxxxxxxx
 */

const int wall11[] = {
  -1, 0, W*3,
  -1, H*5, 0,
  -1, 0, W*-1,
  -1, H*2, 0,
  -1, 0, W*-4, // W*-7 too big
  -1, 0, W*-3,
  -1, H*-5, 0,
  -1, 0, W*5,
  2,
};

// Player start pos is y=9 x=15
/*
xxxxxxxxxxxxxxxxxx
x                x
x                x
x                x
x                x
x                x
x +---+ +------+ x
x |   +-+ . $  | x
x |   $ *.. #$ ++x
x ++ $# ..* $  @|x
x  |  $ . +-+   |x
x  +------+ +---+x
x                x
x                x
x                x
x                x
x                x
xxxxxxxxxxxxxxxxxx
 */

const int wall12[] = {
  -1, 0, W*4,
  -1, H*1, 0,
  -1, 0, W*2,
  -1, H*-1, 0,
  -1, 0, W*4, // W*7 too big
  -1, 0, W*3,
  -1, H*2, 0,
  -1, 0, W*1,
  -1, H*3, 0,
  -1, 0, W*-4,
  -1, H*-1, 0,
  -1, 0, W*-2,
  -1, H*1, 0,
  -1, 0, W*-4, // W*-7 too big
  -1, 0, W*-3,
  -1, H*-2, 0,
  -1, 0, W*-1,
  2,
};

const int testgamewall16x16[] = {
  -1, 0, W*4,
  -1, 0, W*4,
  -1, 0, W*4,
  -1, 0, W*4,

  -1, H*4, 0,
  -1, H*4, 0,
  -1, H*4, 0,
  -1, H*4, 0,

  -1, 0, -W*4,
  -1, 0, -W*4,
  -1, 0, -W*4,
  -1, 0, -W*4,

  -1, -H*4, 0,
  -1, -H*4, 0,
  -1, -H*4, 0,
  -1, -H*4, 0,

  2
};

const int testgamewall8x8[] = {
  1, -2, -127,

  -1, -H*4, 0,
   0, 0, 1,
  -1, -H*4, 0,

  -1, 0, W*4,
  -1, 0, W*4,

  -1, H*4, 0,
  -1, H*4, 0,

  -1, 0, -W*4,
  -1, 0, -W*4,
  2
};


const int const *wall[NUM_GAMES+1] __attribute__ ((section(".text;;;"))) = {
  wall0,
  wall1,
  wall2,
  wall3,
  wall4,
  wall5,
  wall6,
  wall7,
  wall8,
  wall9,
  wall10,
  wall11,
  wall12,
  testgamewall8x8
};
//#endif
#undef W
#undef H
