Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Revision 0:f759a823d3ae, committed 2017-10-10
- Comitter:
- mougino
- Date:
- Tue Oct 10 07:17:45 2017 +0000
- Commit message:
- Pokittris 02/10/17 + PokittoLib for compilation on mbed.com
Changed in this revision
diff -r 000000000000 -r f759a823d3ae PWMOut.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/PWMOut.lib Tue Oct 10 07:17:45 2017 +0000 @@ -0,0 +1,1 @@ +https://mbed.org/users/inst/code/PWMOut/#f1e5739acc27
diff -r 000000000000 -r f759a823d3ae Pokitto.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Pokitto.lib Tue Oct 10 07:17:45 2017 +0000 @@ -0,0 +1,1 @@ +https://os.mbed.com/teams/Pokitto-Community-Team/code/Pokitto/#a65d553f2157
diff -r 000000000000 -r f759a823d3ae easing.h
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/easing.h Tue Oct 10 07:17:45 2017 +0000
@@ -0,0 +1,128 @@
+// t = time, b = start, c = end, d = duration
+//float PI = 3.141591;
+
+float easeInQuad(float t, float b, float c, float d) {
+ return c*(t/=d)*t + b;
+}
+float easeOutQuad(float t, float b, float c, float d) {
+ return -c *(t/=d)*(t-2) + b;
+}
+float easeInOutQuad(float t, float b, float c, float d) {
+ if ((t/=d/2) < 1) return c/2*t*t + b;
+ return -c/2 * ((--t)*(t-2) - 1) + b;
+}
+float easeInCubic(float t, float b, float c, float d) {
+ return c*(t/=d)*t*t + b;
+}
+float easeOutCubic(float t, float b, float c, float d) {
+ return c*((t=t/d-1)*t*t + 1) + b;
+}
+float easeInOutCubic(float t, float b, float c, float d) {
+ if ((t/=d/2) < 1) return c/2*t*t*t + b;
+ return c/2*((t-=2)*t*t + 2) + b;
+}
+float easeInQuart(float t, float b, float c, float d) {
+ return c*(t/=d)*t*t*t + b;
+}
+float easeOutQuart(float t, float b, float c, float d) {
+ return -c * ((t=t/d-1)*t*t*t - 1) + b;
+}
+float easeInOutQuart(float t, float b, float c, float d) {
+ if ((t/=d/2) < 1) return c/2*t*t*t*t + b;
+ return -c/2 * ((t-=2)*t*t*t - 2) + b;
+}
+float easeInQuint(float t, float b, float c, float d) {
+ return c*(t/=d)*t*t*t*t + b;
+}
+float easeOutQuint(float t, float b, float c, float d) {
+ return c*((t=t/d-1)*t*t*t*t + 1) + b;
+}
+float easeInOutQuint(float t, float b, float c, float d) {
+ if ((t/=d/2) < 1) return c/2*t*t*t*t*t + b;
+ return c/2*((t-=2)*t*t*t*t + 2) + b;
+}
+float easeInSine(float t, float b, float c, float d) {
+ return -c * cos(t/d * (PI/2)) + c + b;
+}
+float easeOutSine(float t, float b, float c, float d) {
+ return c * sin(t/d * (PI/2)) + b;
+}
+float easeInOutSine(float t, float b, float c, float d) {
+ return -c/2 * (cos(PI*t/d) - 1) + b;
+}
+float easeInExpo(float t, float b, float c, float d) {
+ return (t==0) ? b : c * pow(2, 10 * (t/d - 1)) + b;
+}
+float easeOutExpo(float t, float b, float c, float d) {
+ return (t==d) ? b+c : c * (-pow(2, -10 * t/d) + 1) + b;
+}
+float easeInOutExpo(float t, float b, float c, float d) {
+ if (t==0) return b;
+ if (t==d) return b+c;
+ if ((t/=d/2) < 1) return c/2 * pow(2, 10 * (t - 1)) + b;
+ return c/2 * (-pow(2, -10 * --t) + 2) + b;
+}
+float easeInCirc(float t, float b, float c, float d) {
+ return -c * (sqrt(1 - (t/=d)*t) - 1) + b;
+}
+float easeOutCirc(float t, float b, float c, float d) {
+ return c * sqrt(1 - (t=t/d-1)*t) + b;
+}
+float easeInOutCirc(float t, float b, float c, float d) {
+ if ((t/=d/2) < 1) return -c/2 * (sqrt(1 - t*t) - 1) + b;
+ return c/2 * (sqrt(1 - (t-=2)*t) + 1) + b;
+}
+float easeInElastic(float t, float b, float c, float d) {
+ float s=1.70158;float p=0; float a=c;
+ if (t==0) return b; if ((t/=d)==1) return b+c; if (!p) p=d*.3;
+ if (a < abs(c)) { a=c; s=p/4; }
+ else s = p/(2*PI) * asin (c/a);
+ return -(a*pow(2,10*(t-=1)) * sin( (t*d-s)*(2*PI)/p )) + b;
+}
+float easeOutElastic(float t, float b, float c, float d) {
+ float s=1.70158;float p=0;float a=c;
+ if (t==0) return b; if ((t/=d)==1) return b+c; if (!p) p=d*.3;
+ if (a < abs(c)) { a=c; s=p/4; }
+ else s = p/(2*PI) * asin (c/a);
+ return a*pow(2,-10*t) * sin( (t*d-s)*(2*PI)/p ) + c + b;
+}
+float easeInOutElastic(float t, float b, float c, float d) {
+ float s=1.70158;float p=0;float a=c;
+ if (t==0) return b; if ((t/=d/2)==2) return b+c; if (!p) p=d*(.3*1.5);
+ if (a < abs(c)) { a=c; s=p/4; }
+ else s = p/(2*PI) * asin (c/a);
+ if (t < 1) return -.5*(a*pow(2,10*(t-=1)) * sin( (t*d-s)*(2*PI)/p )) + b;
+ return a*pow(2,-10*(t-=1)) * sin( (t*d-s)*(2*PI)/p )*.5 + c + b;
+}
+float easeInBack(float t, float b, float c, float d) {
+ float s = 1.70158;
+ return c*(t/=d)*t*((s+1)*t - s) + b;
+}
+float easeOutBack(float t, float b, float c, float d) {
+ float s = 1.70158;
+ return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b;
+}
+float easeInOutBack(float t, float b, float c, float d) {
+ float s = 1.70158;
+ if ((t/=d/2) < 1) return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b;
+ return c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b;
+}
+
+float easeOutBounce(float t, float b, float c, float d) {
+ if ((t/=d) < (1/2.75)) {
+ return c*(7.5625*t*t) + b;
+ } else if (t < (2/2.75)) {
+ return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b;
+ } else if (t < (2.5/2.75)) {
+ return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b;
+ } else {
+ return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b;
+ }
+}
+float easeInBounce(float t, float b, float c, float d) {
+ return c - easeOutBounce (d-t, 0, c, d) + b;
+}
+float easeInOutBounce(float t, float b, float c, float d) {
+ if (t < d/2) return easeInBounce (t*2, 0, c, d) * .5 + b;
+ return easeOutBounce (t*2-d, 0, c, d) * .5 + c*.5 + b;
+}
diff -r 000000000000 -r f759a823d3ae tetris.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tetris.cpp Tue Oct 10 07:17:45 2017 +0000
@@ -0,0 +1,576 @@
+// music - 8bit archade4 from www.dl-sounds.com
+
+#include "Pokitto.h"
+#include "tetris_gfx.h"
+#include "easing.h"
+
+#define REPSPEED 12
+
+Pokitto::Core game;
+
+#define HELD 0
+#define NEW 1
+#define RELEASE 2
+byte CompletePad, ExPad, TempPad, myPad;
+bool _A[3], _B[3], _C[3], _Up[3], _Down[3], _Left[3], _Right[3];
+bool bgNum = 1;
+char musicName[] = "pokittris.raw";
+byte palNum = 0;
+
+int topLine;
+byte unlockedPal=0;
+bool removeLine[19];
+byte linesToRemove=0;
+byte animCount;
+bool splodeOK=0;
+byte animSplode=0;
+
+void UPDATEPAD(int pad, int var) {
+ _C[pad] = (var >> 1)&1;
+ _B[pad] = (var >> 2)&1;
+ _A[pad] = (var >> 3)&1;
+ _Down[pad] = (var >> 4)&1;
+ _Left[pad] = (var >> 5)&1;
+ _Right[pad] = (var >> 6)&1;
+ _Up[pad] = (var >> 7)&1;
+}
+
+void UpdatePad(int joy_code){
+ ExPad = CompletePad;
+ CompletePad = joy_code;
+ UPDATEPAD(HELD, CompletePad); // held
+ UPDATEPAD(RELEASE, (ExPad & (~CompletePad))); // released
+ UPDATEPAD(NEW, (CompletePad & (~ExPad))); // newpress
+}
+
+byte updateButtons(byte var){
+ var = 0;
+ if (game.buttons.cBtn()) var |= (1<<1);
+ if (game.buttons.bBtn()) var |= (1<<2);
+ if (game.buttons.aBtn()) var |= (1<<3);
+ if (game.buttons.downBtn()) var |= (1<<4);
+ if (game.buttons.leftBtn()) var |= (1<<5);
+ if (game.buttons.rightBtn()) var |= (1<<6);
+ if (game.buttons.upBtn()) var |= (1<<7);
+
+ return var;
+}
+
+
+
+// some globals...
+long int frameNumber = 0;
+long int myDelay;
+long int tempTime;
+int dropTime = 0;
+int slideTime = 0;
+byte gameMode = 0;
+bool paused = 0;
+byte menuItem;
+bool bgmusic = 1;
+
+byte px, py, ps, pr; // player x,y,shape,rotation
+byte nextTile;
+byte lineCount, level;
+int score, lines;
+bool okToContinue = 0;
+byte slideSpeed = 10;
+
+
+void loadPal(char num){
+ unsigned short curPal[4];
+ curPal[0] = pallet[(num*4)];
+ curPal[1] = pallet[(num*4)+1];
+ curPal[2] = pallet[(num*4)+2];
+ curPal[3] = pallet[(num*4)+3];
+ game.display.load565Palette(curPal);
+}
+
+void drawShape(byte x1, signed char y1, byte shape, byte frame) {
+ for (char y = 0; y < 4; y++) {
+ if (y1 + y > 1) {
+ for (char x = 0; x < 4; x++) {
+ byte mt = pgm_read_byte(shapeMap + (x + 4 * y) + shape * 64 + (frame * 16));
+ if (mt > 1) {
+ game.display.drawBitmap((x1 + x)*8, (y1 + y)*8, tile_gfx[(mt-1)+shape*6]);
+ }
+ }
+ }
+ }
+}
+
+bool check(signed char x1, signed char y1, char rot) {
+ byte ret=0;
+ for (char y = 0; y < 4; y++) {
+ if (y1 + y >= 0) {
+ for (char x = 0; x < 4; x++) {
+ byte mt = pgm_read_byte(shapeMap + (x + 4 * y) + ps * 64 + (rot * 16));
+ if (mt > 1) {
+ if ( playfield[(x1 + x) + 16 * (y1 + y)] != 0) {
+ ret= 1;
+ }
+ }
+ }
+ }
+ }
+ return ret;
+}
+
+void stamp(signed char x1, signed char y1, byte shape, byte rot) {
+ for (char y = 0; y < 4; y++) {
+ if (y1 + y >= 0) {
+ for (char x = 0; x < 4; x++) {
+ byte mt = pgm_read_byte(shapeMap + (x + 4 * y) + shape * 64 + (rot * 16));
+ if (mt > 1) {
+ playfield[(x1 + x) + 16 * (y1 + y)] = (mt-1)+shape*6;
+ }
+ }
+ }
+ }
+}
+
+
+void clearPlayfield() {
+ for (char y = 0; y < 19; y++) {
+ for (char x = 3; x < 13; x++) {
+ playfield[x + 16 * y] = 0;
+ }
+ }
+}
+
+void drawBackground(){
+ for (char y = 0; y < 22; y++) {
+ for (char x = 0; x < 28; x++) {
+ byte mt = bg_map[x + 28 * y + (616*bgNum)];
+ game.display.drawBitmap(x*8, y*8, bg_gfx[mt]);
+ }
+ }
+}
+
+void drawPlayfield() {
+ drawBackground();
+
+ for (char y = 1; y < 19; y++) {
+ for (char x = 3; x < 13; x++) {
+ byte mt = playfield[x + 16 * y];
+ game.display.drawBitmap((x + 5)*8, (y+1 )*8, tile_gfx[mt]);
+ }
+ }
+
+ if(animSplode==0){
+ // current shape
+ drawShape(px+5, py+1, ps, pr);
+ }
+ // next shape?
+ drawShape(19, 14, nextTile, 0);
+
+ char text[] = " ";
+ sprintf(text, "%05d", score);
+ game.display.setCursor(152,56);
+ game.display.color=3;
+ game.display.print(text);
+ sprintf(text, "%5d", level);
+ game.display.setCursor(16,96);
+ game.display.print(text);
+ sprintf(text, "%5d", lines);
+ game.display.setCursor(16,48);
+ game.display.print(text);
+
+}
+
+
+
+void checkLine() {
+
+ for(char t=0; t<19; t++){
+ removeLine[t]=0;
+ }
+
+ if (py <= 0) {
+ loadPal(1); // default green palette
+ gameMode = 3; // gameOver if off top of screen
+ frameNumber=0;
+ return;
+ }
+
+ score++; // increase score here as it's called whenever a tile drops
+ topLine = 0;
+
+ for (char y = 0; y < 19; y++) {
+ char line = 0;
+ for (char x = 3; x < 13; x++) {
+ line += playfield[x + 16 * y] != 0 ? 1 : 0;
+ }
+ if (line == 10) { // remove line
+ removeLine[y]=1;
+ linesToRemove++;
+ if(linesToRemove==4){splodeOK=1;}
+ lineCount++;
+ if (lineCount == 10) {
+ lineCount = 0;
+ level++;
+ }
+ lines++;
+ score += 10;
+ }
+ }
+
+ for (char y = 0; y < 10; y++) {
+ char line = 0;
+ for (char x = 3; x < 13; x++) {
+ topLine += playfield[x + 16 * y] != 0 ? 1 : 0;
+ }
+ }
+
+
+ // mess with the palette
+
+ int percent = 100;
+ int diff = topLine;
+
+ unsigned short *p;
+ palNum = 0;//level & 31;
+ p=pallet+(palNum*4);
+ unsigned short curPal[4];
+
+ curPal[0] = pallet[(palNum*4)];
+ curPal[1] = pallet[(palNum*4)+1];
+ curPal[2] = pallet[(palNum*4)+2];
+ curPal[3] = pallet[(palNum*4)+3];
+
+ int greyPal[] = {0xF800,0xF8000,0xF800,0xF800}; // it's actually RED for danger!
+
+ unsigned short red[4], green[4], blue[4], red1[4], green1[4], blue1[4], red2[4], green2[4], blue2[4];
+
+ for(char t=0; t<4; t++){
+ red1[t] = (curPal[t]>>11) & 31;
+ red2[t] = (greyPal[t]>> 11) & 31;
+ green1[t] = (curPal[t]>> 5) & 63;
+ green2[t] = (greyPal[t]>> 5) & 63;
+ blue1[t] = curPal[t] & 31;
+ blue2[t] = greyPal[t] & 31;
+
+ red[t] = red1[t]+((red2[t]-red1[t])*diff/percent);
+ green[t] = green1[t]+((green2[t]-green1[t])*diff/percent);
+ blue[t] = blue1[t]+((blue2[t]-blue1[t])*diff/percent);
+
+ curPal[t] = (red[t]<<11)+(green[t]<<5)+blue[t];
+
+ }
+
+ game.display.load565Palette(curPal);
+
+}
+
+
+// transparent 2bit bitmap with mask
+void drawMyBitmap(int16_t x, int16_t y, const uint8_t* bitmap, const uint8_t* mask)
+{
+ int16_t w = *bitmap;
+ int16_t h = *(bitmap + 1);
+ bitmap = bitmap + 2; //add an offset to the pointer to start after the width and height
+ /** visibility check */
+ if (y<-h || y>game.display.height) return; //invisible
+ if (x<-w || x>game.display.width) return; //invisible
+
+ /** 2 bpp mode */
+ int16_t i, j, byteNum, bitNum, byteWidth = w >> 2;
+ for (i = 0; i < w; i++) {
+ byteNum = i / 4;
+ bitNum = (i % 4)<<1;
+ for (j = 0; j < h; j++) {
+ uint8_t source = *(bitmap + j * byteWidth + byteNum);
+ uint8_t source2 = *(mask + j * byteWidth + byteNum+2);
+ uint8_t output = (source & (0xC0 >> bitNum));
+ output >>= (6-bitNum);
+
+ uint8_t output2 = (source2 & (0xC0 >> bitNum));
+ output2 >>= (6-bitNum);
+
+ if (output2 != 0) {
+ game.display.setColor(output);
+ game.display.drawPixel(x + i, y + j);
+ }
+ }
+
+ //return;
+ }
+}
+
+
+
+void titleScreen(){
+
+ // background
+ for (char y = 0; y < 22; y++) {
+ for (char x = 0; x < 28; x++) {
+ byte mt = bg_map[x + 28 * y];
+ game.display.drawBitmap(x*8, y*8, bg_gfx[mt]);
+ }
+ }
+
+int y=48;
+ if(frameNumber<=64){
+ // time, start, distance, duration
+ #ifdef POK_SIM
+ y = easeOutBounce(frameNumber, -48, 48+48, 64);
+ #else
+ y = easeOutBounce(frameNumber*4, -48, 48+48, 64);
+ if (y>48) y=48;
+ #endif
+ }
+ drawMyBitmap(16, y, title_bitmap, title_mask);
+
+
+ char text[] = " Press A to Start ";
+ game.display.setCursor(40,120);
+ game.display.color=3;
+ game.display.print(text);
+
+ if(_A[NEW]){
+ // make sure the playfield is clear!
+ for (char y = 18; y > 0; y--) {
+ for (char x = 3; x < 13; x++) {
+ playfield[x + 16 * y] = 0;
+ }
+ }
+
+ loadPal(0); // default green palette
+ gameMode = 1;
+ }
+
+}
+
+void gameOver(){
+ // background
+ for (char y = 0; y < 22; y++) {
+ for (char x = 0; x < 28; x++) {
+ byte mt = bg_map[x + 28 * y];
+ game.display.drawBitmap(x*8, y*8, bg_gfx[mt]);
+ }
+ }
+
+ int y=48;
+ if(frameNumber<=64){
+ // time, start, distance, duration
+ y = easeOutBounce(frameNumber, -48, 48+48, 64);
+ }
+ drawMyBitmap(1, y, gameover_bitmap, gameover_mask);
+
+ char text[] = " Press A ";
+ game.display.setCursor(62,120);
+ game.display.color=3;
+ game.display.print(text);
+
+ if(_A[NEW]){
+ gameMode = 0;
+ frameNumber = 0;
+ score=0;
+ lines=0;
+ level=0;
+ splodeOK=0;
+ animSplode=0;
+ }
+
+}
+
+void playGame(){
+ #ifdef POK_SIM
+ #define SLIDECOUNT 6
+ #define DROPCOUNT 20
+ #else
+ #define SLIDECOUNT 1
+ #define DROPCOUNT 2
+ #endif
+
+ if(linesToRemove==0 && animSplode==0){
+
+ if (_Left[NEW]) {
+ if (check(px - 1, py, pr) == 0) {
+ px--;
+ slideTime = 0;
+ }
+ }
+ if (_Right[NEW]) {
+ if (check(px + 1, py, pr) == 0) {
+ px++;
+ slideTime = 0;
+ }
+ }
+ if (_Left[HELD] && slideTime++ > SLIDECOUNT) {
+ if (check(px - 1, py, pr) == 0) {
+ px--;
+ slideTime = 12;
+ }
+ }
+ if (_Right[HELD] && slideTime++ > SLIDECOUNT) {
+ if (check(px + 1, py, pr) == 0) {
+ px++;
+ slideTime = 12;
+ }
+ }
+
+ if ((_Down[HELD]) || (dropTime++ > DROPCOUNT - (level * 2))) {
+ dropTime = 0;
+ if (check(px, py+1, pr) == 0) {
+ py++;
+ } else {
+ // place shape and create new one
+ stamp(px, py, ps, pr);
+ checkLine();
+ py = 0; px = 6; ps = nextTile; nextTile = random(6); pr = 0;
+ }
+ }
+ if (_Up[NEW] && splodeOK==1) {
+ splodeOK=0;
+ animSplode=1;
+ }
+
+ if (_A[NEW]) {
+ if (check(px, py, (pr - 1) & 3) == 0) {
+ pr--;
+ } else if (check(px - 1, py, (pr - 1) & 3) == 0) {
+ pr--; px--;
+ } else if (check(px + 1, py, (pr - 1) & 3) == 0) {
+ pr--; px++;
+ } else if (check(px - 2, py, (pr - 1) & 3) == 0) {
+ pr--; px -= 2;
+ } else if (check(px + 2, py, (pr - 1) & 3) == 0) {
+ pr--; px += 2;
+ }
+ pr &= 3;
+ }
+
+ if (_B[NEW]) {
+ if (check(px, py, (pr + 1) & 3) == 0) {
+ pr++;
+ } else if (check(px - 1, py, (pr + 1) & 3) == 0) {
+ pr++; px--;
+ } else if (check(px + 1, py, (pr + 1) & 3) == 0) {
+ pr++; px++;
+ } else if (check(px - 2, py, (pr + 1) & 3) == 0) {
+ pr++; px -= 2;
+ } else if (check(px + 2, py, (pr + 1) & 3) == 0) {
+ pr++; px += 2;
+ }
+ pr &= 3;
+ }
+
+ animCount=0;
+ }
+
+ if(linesToRemove!=0){
+ // remove some lines
+ for(byte t=0; t<19; t++){
+ if(removeLine[t]==1){
+ if(animCount<5){
+ for (char x = 3; x < 13; x++) {
+ playfield[x + 16 * t] = 5+animCount*6;
+ } // x
+ }else{
+ removeLine[t]=0;
+ linesToRemove--;
+ for (char y1 = t; y1 > 0; y1--) {
+ for (char x = 3; x < 13; x++) {
+ playfield[x + 16 * y1] = playfield[x + 16 * (y1 - 1)];
+ }
+ }
+ }
+ }
+ }
+ animCount++;
+ }
+
+ if(animSplode!=0){
+
+ if(animSplode<6){
+ for (char y = 0; y < 4; y++) {
+ if (py + y >= 0) {
+ for (char x = 0; x < 4; x++) {
+ byte mt = pgm_read_byte(shapeMap + (x + 4 * y) + ps * 64 + (pr * 16));
+ if (mt > 1) {
+ playfield[(px + x) + 16 * (py + y)] = 5+animSplode*6;
+ }
+ }
+ }
+ }
+ animSplode++;
+ }else{
+
+ for (char y = 0; y < 4; y++) {
+ if (py + y >= 0) {
+ for (char x = 0; x < 4; x++) {
+ byte mt = pgm_read_byte(shapeMap + (x + 4 * y) + ps * 64 + (pr * 16));
+ if (mt > 1) {
+ playfield[(px + x) + 16 * (py + y)] = 0;
+ }
+ }
+ }
+ }
+ py = 0; px = 6; ps = nextTile;
+ nextTile = random(6); pr = 0;
+ animSplode=0;
+ }
+ }
+
+ // render screen
+ drawPlayfield();
+}
+
+
+
+
+int main(){
+
+ game.begin();
+ game.display.width = 220; // full size
+ game.display.height = 176;
+ game.display.setFont(fontC64);
+ //game.display.charSpacingAdjust = 0; //needed for the non-proportional C64 font (normal value=1)
+ game.display.fixedWidthFont = true;
+
+ loadPal(1); // default green palette
+
+ px=6;
+ gameMode=0;
+ char oldMode = 50;
+ myDelay=40;
+
+ game.sound.playMusicStream(musicName);
+
+ frameNumber=0;
+ animCount=0;
+ splodeOK=0;
+ animSplode=0;
+
+ while (game.isRunning()) {
+
+ // if it is time to update the screen
+ if (game.update()){
+
+ frameNumber++;
+ game.sound.updateStream();
+ game.buttons.update();
+ myPad = updateButtons(myPad);
+ UpdatePad(myPad);
+
+ switch (gameMode) {
+ case 0:
+ titleScreen();
+ break;
+ case 1:
+ if (paused) {
+ // pauseMenu();
+ } else {
+ playGame();
+ }
+ break;
+ case 3:
+ gameOver();
+ break;
+ }
+
+ }
+ }
+ return 0;
+}
diff -r 000000000000 -r f759a823d3ae tetris_gfx.h
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tetris_gfx.h Tue Oct 10 07:17:45 2017 +0000
@@ -0,0 +1,1492 @@
+
+unsigned short pallet[]={
+// 65535,50712,33808,0, // GREY
+ 0xFFFF, 0xD81B, 0xF440, 0x1514, // jonne
+ 50804,36013,27530,16904, // Gameboy
+ 0xd6d7, 0x9553, 0x3b0d, 0x19a8, // lcd?
+ 0xCF9D, 0x86D8, 0x25F2, 0x138A, // mint
+ 0xF6D8, 0x9DF7, 0x42D1, 0x1928, // dk blue
+ 0xFFDB, 0xF74E, 0xFD48, 0xEB06, // fire
+ 0xF7DF, 0xA698, 0xEAE9, 0x42EB, // future2
+
+0xFF59, 0xDC89, 0xA944, 0x30CA,
+0xDED8, 0xCD8E, 0xB282, 0x0000,
+0xFE1F, 0xECCA, 0x99CC, 0x39D3,
+0xFFD5, 0xC409, 0xF800, 0x50C0,
+0xFED6, 0x7E0F, 0x6C48, 0x59C4,
+0xDF5F, 0xE44A, 0xA800, 0x0202,
+0xFFCB, 0x7BC0, 0x051D, 0x000A,
+0xFF5C, 0xFDD1, 0x8200, 0x30C0,
+0xF654, 0xC449, 0x2BC0, 0x0000,
+0xFFDF, 0xFF4A, 0xF980, 0x500B,
+0xFE1F, 0xEC51, 0x799D, 0x2953,
+0xFFD4, 0x07C0, 0xF980, 0x000A,
+0xFE50, 0x959C, 0x288C, 0x1042,
+0xD7DF, 0xFC8A, 0xA000, 0x1800,
+0x6DC7, 0xE288, 0xE5D0, 0x00C0,
+0xFFDF, 0xBDD7, 0x738E, 0x0000,
+0xFE93, 0x7618, 0xFB05, 0x324C,
+0xDED8, 0xE404, 0x0280, 0x0082,
+0xE559, 0xFFCF, 0x05DF, 0x210B,
+0xF7D7, 0xE54F, 0x0E40, 0x0000,
+0xFFD8, 0xE58D, 0xB3C4, 0x524E,
+0x7BD9, 0xFB5F, 0xFE80, 0x4208,
+0xFFDF, 0x66CA, 0xC987, 0x3800,
+0xE7D4, 0x7E47, 0x4C43, 0x08C0,
+0xF54D, 0x7D5F, 0xD01A, 0x000F,
+0xF75E, 0xED0C, 0x43C7, 0x1841,
+0xFF1C, 0xDD1A, 0x9D1C, 0x0800,
+0xFFD7, 0x9659, 0x4B4F, 0x0909,
+0xFED5, 0xE54F, 0x7AD1, 0x0106,
+0xBE9A, 0xDC1B, 0x8014, 0x3800,
+0xB703, 0x040C, 0xB90B, 0x2880,
+0xFFD9, 0xBE0B, 0x8448, 0x4285,
+
+};
+
+byte playfield[]={
+ 0,0,4,0,0,0,0,0,0,0,0,0,0,4,0,0,
+ 0,0,5,0,0,0,0,0,0,0,0,0,0,5,0,0,
+ 0,0,5,0,0,0,0,0,0,0,0,0,0,5,0,0,
+ 0,0,5,0,0,0,0,0,0,0,0,0,0,5,0,0,
+ 0,0,5,0,0,0,0,0,0,0,0,0,0,5,0,0,
+ 0,0,5,0,0,0,0,0,0,0,0,0,0,5,0,0,
+ 0,0,5,0,0,0,0,0,0,0,0,0,0,5,0,0,
+ 0,0,5,0,0,0,0,0,0,0,0,0,0,5,0,0,
+ 0,0,5,0,0,0,0,0,0,0,0,0,0,5,0,0,
+ 0,0,5,0,0,0,0,0,0,0,0,0,0,5,0,0,
+ 0,0,5,0,0,0,0,0,0,0,0,0,0,5,0,0,
+ 0,0,5,0,0,0,0,0,0,0,0,0,0,5,0,0,
+ 0,0,5,0,0,0,0,0,0,0,0,0,0,5,0,0,
+ 0,0,5,0,0,0,0,0,0,0,0,0,0,5,0,0,
+ 0,0,5,0,0,0,0,0,0,0,0,0,0,5,0,0,
+ 0,0,5,0,0,0,0,0,0,0,0,0,0,5,0,0,
+ 0,0,5,0,0,0,0,0,0,0,0,0,0,5,0,0,
+ 0,0,5,0,0,0,0,0,0,0,0,0,0,5,0,0,
+ 0,0,5,0,0,0,0,0,0,0,0,0,0,5,0,0,
+ 0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,
+ 0,1,1,0,0,0,0,0,0,0,0,0,0,1,1,0,
+ 0,1,1,0,0,0,0,0,0,0,0,0,0,1,1,0,
+};
+
+
+
+//Sprite sheet:1x42
+const uint8_t tile_gfx [][18] ={
+//[0] cell:0x0
+{
+8,8,
+0,0,
+0,0,
+0,0,
+0,0,
+0,0,
+0,0,
+0,0,
+0,0,
+},
+//[1] cell:0x1
+{
+8,8,
+0,0,
+63,255,
+63,255,
+63,255,
+63,255,
+63,255,
+63,255,
+63,255,
+},
+//[2] cell:0x2
+{
+8,8,
+0,0,
+255,255,
+255,255,
+255,255,
+255,255,
+255,255,
+255,255,
+255,255,
+},
+//[3] cell:0x3
+{
+8,8,
+63,255,
+63,255,
+63,255,
+63,255,
+63,255,
+63,255,
+63,255,
+63,255,
+},
+//[4] cell:0x4
+{
+8,8,
+63,255,
+255,255,
+255,255,
+255,255,
+255,255,
+255,255,
+255,255,
+255,255,
+},
+//[5] cell:0x5
+{
+8,8,
+255,255,
+255,255,
+255,255,
+255,255,
+255,255,
+255,255,
+255,255,
+255,255,
+},
+//[6] cell:0x6
+{
+8,8,
+0,0,
+0,0,
+0,0,
+0,0,
+0,0,
+0,0,
+0,0,
+0,0,
+},
+//[7] cell:0x7
+{
+8,8,
+0,0,
+59,187,
+46,238,
+59,187,
+46,238,
+59,187,
+46,238,
+59,187,
+},
+//[8] cell:0x8
+{
+8,8,
+0,0,
+187,187,
+238,238,
+187,187,
+238,238,
+187,187,
+238,238,
+187,187,
+},
+//[9] cell:0x9
+{
+8,8,
+46,238,
+59,187,
+46,238,
+59,187,
+46,238,
+59,187,
+46,238,
+59,187,
+},
+//[10] cell:0x10
+{
+8,8,
+46,238,
+187,187,
+238,238,
+187,187,
+238,238,
+187,187,
+238,238,
+187,187,
+},
+//[11] cell:0x11
+{
+8,8,
+238,238,
+187,187,
+238,238,
+187,187,
+238,238,
+187,187,
+238,238,
+187,187,
+},
+//[12] cell:0x12
+{
+8,8,
+0,0,
+0,0,
+0,0,
+0,0,
+0,0,
+0,0,
+0,0,
+0,0,
+},
+//[13] cell:0x13
+{
+8,8,
+0,0,
+42,170,
+42,170,
+42,170,
+42,170,
+42,170,
+42,170,
+42,170,
+},
+//[14] cell:0x14
+{
+8,8,
+0,0,
+170,170,
+170,170,
+170,170,
+170,170,
+170,170,
+170,170,
+170,170,
+},
+//[15] cell:0x15
+{
+8,8,
+42,170,
+42,170,
+42,170,
+42,170,
+42,170,
+42,170,
+42,170,
+42,170,
+},
+//[16] cell:0x16
+{
+8,8,
+42,170,
+170,170,
+170,170,
+170,170,
+170,170,
+170,170,
+170,170,
+170,170,
+},
+//[17] cell:0x17
+{
+8,8,
+170,170,
+170,170,
+170,170,
+170,170,
+170,170,
+170,170,
+170,170,
+170,170,
+},
+//[18] cell:0x18
+{
+8,8,
+0,0,
+0,0,
+0,0,
+0,0,
+0,0,
+0,0,
+0,0,
+0,0,
+},
+//[19] cell:0x19
+{
+8,8,
+0,0,
+38,102,
+25,153,
+38,102,
+25,153,
+38,102,
+25,153,
+38,102,
+},
+//[20] cell:0x20
+{
+8,8,
+0,0,
+102,102,
+153,153,
+102,102,
+153,153,
+102,102,
+153,153,
+102,102,
+},
+//[21] cell:0x21
+{
+8,8,
+25,153,
+38,102,
+25,153,
+38,102,
+25,153,
+38,102,
+25,153,
+38,102,
+},
+//[22] cell:0x22
+{
+8,8,
+25,153,
+102,102,
+153,153,
+102,102,
+153,153,
+102,102,
+153,153,
+102,102,
+},
+//[23] cell:0x23
+{
+8,8,
+153,153,
+102,102,
+153,153,
+102,102,
+153,153,
+102,102,
+153,153,
+102,102,
+},
+//[24] cell:0x24
+{
+8,8,
+0,0,
+0,0,
+0,0,
+0,0,
+0,0,
+0,0,
+0,0,
+0,0,
+},
+//[25] cell:0x25
+{
+8,8,
+0,0,
+21,85,
+21,85,
+21,85,
+21,85,
+21,85,
+21,85,
+21,85,
+},
+//[26] cell:0x26
+{
+8,8,
+0,0,
+85,85,
+85,85,
+85,85,
+85,85,
+85,85,
+85,85,
+85,85,
+},
+//[27] cell:0x27
+{
+8,8,
+21,85,
+21,85,
+21,85,
+21,85,
+21,85,
+21,85,
+21,85,
+21,85,
+},
+//[28] cell:0x28
+{
+8,8,
+21,85,
+85,85,
+85,85,
+85,85,
+85,85,
+85,85,
+85,85,
+85,85,
+},
+//[29] cell:0x29
+{
+8,8,
+85,85,
+85,85,
+85,85,
+85,85,
+85,85,
+85,85,
+85,85,
+85,85,
+},
+//[30] cell:0x30
+{
+8,8,
+0,0,
+0,0,
+0,0,
+0,0,
+0,0,
+0,0,
+0,0,
+0,0,
+},
+//[31] cell:0x31
+{
+8,8,
+0,0,
+17,17,
+4,68,
+17,17,
+4,68,
+17,17,
+4,68,
+17,17,
+},
+//[32] cell:0x32
+{
+8,8,
+0,0,
+17,17,
+68,68,
+17,17,
+68,68,
+17,17,
+68,68,
+17,17,
+},
+//[33] cell:0x33
+{
+8,8,
+4,68,
+17,17,
+4,68,
+17,17,
+4,68,
+17,17,
+4,68,
+17,17,
+},
+//[34] cell:0x34
+{
+8,8,
+4,68,
+17,17,
+68,68,
+17,17,
+68,68,
+17,17,
+68,68,
+17,17,
+},
+//[35] cell:0x35
+{
+8,8,
+68,68,
+17,17,
+68,68,
+17,17,
+68,68,
+17,17,
+68,68,
+17,17,
+},
+//[36] cell:0x36
+{
+8,8,
+0,0,
+0,0,
+0,0,
+0,0,
+0,0,
+0,0,
+0,0,
+0,0,
+},
+//[37] cell:0x37
+{
+8,8,
+0,0,
+29,221,
+55,119,
+29,221,
+55,119,
+29,221,
+55,119,
+29,221,
+},
+//[38] cell:0x38
+{
+8,8,
+0,0,
+221,221,
+119,119,
+221,221,
+119,119,
+221,221,
+119,119,
+221,221,
+},
+//[39] cell:0x39
+{
+8,8,
+55,119,
+29,221,
+55,119,
+29,221,
+55,119,
+29,221,
+55,119,
+29,221,
+},
+//[40] cell:0x40
+{
+8,8,
+55,119,
+221,221,
+119,119,
+221,221,
+119,119,
+221,221,
+119,119,
+221,221,
+},
+//[41] cell:0x41
+{
+8,8,
+119,119,
+221,221,
+119,119,
+221,221,
+119,119,
+221,221,
+119,119,
+221,221,
+},
+};
+
+
+//Sprite sheet:1x49
+const uint8_t bg_gfx [][18] ={
+//[0] cell:0x0
+{
+8,8,
+0,0,
+0,0,
+0,0,
+0,0,
+0,0,
+0,0,
+0,0,
+0,0,
+},
+//[1] cell:0x1
+{
+8,8,
+0,0,
+0,0,
+0,0,
+0,0,
+0,0,
+0,0,
+0,0,
+0,0,
+},
+//[2] cell:0x2
+{
+8,8,
+0,0,
+17,17,
+4,68,
+17,17,
+4,68,
+17,17,
+4,68,
+17,17,
+},
+//[3] cell:0x3
+{
+8,8,
+0,0,
+17,17,
+68,68,
+17,17,
+68,68,
+17,17,
+68,68,
+17,17,
+},
+//[4] cell:0x4
+{
+8,8,
+4,68,
+17,17,
+68,68,
+17,17,
+68,68,
+17,17,
+68,68,
+17,17,
+},
+//[5] cell:0x5
+{
+8,8,
+4,68,
+17,17,
+4,68,
+17,17,
+4,68,
+17,17,
+4,68,
+17,17,
+},
+//[6] cell:0x6
+{
+8,8,
+68,68,
+17,17,
+68,68,
+17,17,
+68,68,
+17,17,
+68,68,
+17,17,
+},
+//[7] cell:0x7
+{
+8,8,
+0,0,
+25,153,
+38,102,
+25,153,
+38,102,
+25,153,
+38,102,
+25,153,
+},
+//[8] cell:0x8
+{
+8,8,
+0,0,
+153,153,
+102,102,
+153,153,
+102,102,
+153,153,
+102,102,
+153,153,
+},
+//[9] cell:0x9
+{
+8,8,
+38,102,
+153,153,
+102,102,
+153,153,
+102,102,
+153,153,
+102,102,
+153,153,
+},
+//[10] cell:0x10
+{
+8,8,
+0,0,
+21,85,
+21,85,
+21,85,
+21,85,
+21,85,
+21,85,
+21,85,
+},
+//[11] cell:0x11
+{
+8,8,
+0,0,
+85,85,
+85,85,
+85,85,
+85,85,
+85,85,
+85,85,
+85,85,
+},
+//[12] cell:0x12
+{
+8,8,
+21,85,
+21,85,
+21,85,
+21,85,
+21,85,
+21,85,
+21,85,
+21,85,
+},
+//[13] cell:0x13
+{
+8,8,
+85,85,
+85,85,
+85,85,
+85,85,
+85,85,
+85,85,
+85,85,
+85,85,
+},
+//[14] cell:0x14
+{
+8,8,
+38,102,
+25,153,
+38,102,
+25,153,
+38,102,
+25,153,
+38,102,
+25,153,
+},
+//[15] cell:0x15
+{
+8,8,
+21,85,
+85,85,
+85,85,
+85,85,
+85,85,
+85,85,
+85,85,
+85,85,
+},
+//[16] cell:0x16
+{
+8,8,
+0,0,
+42,170,
+42,170,
+42,170,
+42,170,
+42,170,
+42,170,
+42,170,
+},
+//[17] cell:0x17
+{
+8,8,
+0,0,
+170,170,
+170,170,
+170,170,
+170,170,
+170,170,
+170,170,
+170,170,
+},
+//[18] cell:0x18
+{
+8,8,
+42,170,
+42,170,
+42,170,
+42,170,
+42,170,
+42,170,
+42,170,
+42,170,
+},
+//[19] cell:0x19
+{
+8,8,
+102,102,
+153,153,
+102,102,
+153,153,
+102,102,
+153,153,
+102,102,
+153,153,
+},
+//[20] cell:0x20
+{
+8,8,
+0,0,
+59,187,
+46,238,
+59,187,
+46,238,
+59,187,
+46,238,
+59,187,
+},
+//[21] cell:0x21
+{
+8,8,
+0,0,
+187,187,
+238,238,
+187,187,
+238,238,
+187,187,
+238,238,
+187,187,
+},
+//[22] cell:0x22
+{
+8,8,
+46,238,
+187,187,
+238,238,
+187,187,
+238,238,
+187,187,
+238,238,
+187,187,
+},
+//[23] cell:0x23
+{
+8,8,
+170,170,
+170,170,
+170,170,
+170,170,
+170,170,
+170,170,
+170,170,
+170,170,
+},
+//[24] cell:0x24
+{
+8,8,
+46,238,
+59,187,
+46,238,
+59,187,
+46,238,
+59,187,
+46,238,
+59,187,
+},
+//[25] cell:0x25
+{
+8,8,
+0,0,
+63,255,
+63,255,
+63,255,
+63,255,
+63,255,
+63,255,
+63,255,
+},
+//[26] cell:0x26
+{
+8,8,
+0,0,
+255,255,
+255,255,
+255,255,
+255,255,
+255,255,
+255,255,
+255,255,
+},
+//[27] cell:0x27
+{
+8,8,
+63,255,
+255,255,
+255,255,
+255,255,
+255,255,
+255,255,
+255,255,
+255,255,
+},
+//[28] cell:0x28
+{
+8,8,
+42,170,
+170,170,
+170,170,
+170,170,
+170,170,
+170,170,
+170,170,
+170,170,
+},
+//[29] cell:0x29
+{
+8,8,
+238,238,
+187,187,
+238,238,
+187,187,
+238,238,
+187,187,
+238,238,
+187,187,
+},
+//[30] cell:0x30
+{
+8,8,
+63,255,
+63,255,
+63,255,
+63,255,
+63,255,
+63,255,
+63,255,
+63,255,
+},
+//[31] cell:0x31
+{
+8,8,
+0,0,
+0,0,
+63,255,
+63,255,
+63,255,
+63,255,
+63,255,
+63,255,
+},
+//[32] cell:0x32
+{
+8,8,
+255,255,
+255,255,
+255,255,
+255,255,
+255,255,
+255,255,
+255,255,
+255,255,
+},
+//[33] cell:0x33
+{
+8,8,
+0,0,
+0,127,
+3,192,
+13,0,
+28,0,
+48,5,
+48,27,
+48,28,
+},
+//[34] cell:0x34
+{
+8,8,
+0,0,
+255,255,
+0,0,
+0,0,
+0,0,
+85,85,
+255,255,
+0,0,
+},
+//[35] cell:0x35
+{
+8,8,
+0,0,
+253,0,
+3,192,
+0,112,
+0,116,
+64,28,
+224,28,
+48,28,
+},
+//[36] cell:0x36
+{
+8,8,
+48,28,
+48,28,
+48,28,
+48,28,
+48,28,
+48,28,
+48,28,
+48,28,
+},
+//[37] cell:0x37
+{
+8,8,
+0,0,
+0,127,
+3,192,
+13,0,
+28,0,
+48,1,
+48,11,
+48,28,
+},
+//[38] cell:0x38
+{
+8,8,
+48,28,
+224,28,
+0,28,
+0,28,
+0,28,
+64,28,
+224,28,
+48,28,
+},
+//[39] cell:0x39
+{
+8,8,
+60,0,
+60,0,
+60,0,
+60,0,
+60,0,
+60,0,
+63,252,
+0,0,
+},
+//[40] cell:0x40
+{
+8,8,
+15,240,
+3,192,
+3,192,
+3,192,
+3,192,
+3,192,
+15,240,
+0,0,
+},
+//[41] cell:0x41
+{
+8,8,
+60,60,
+63,60,
+63,252,
+63,252,
+60,252,
+60,60,
+60,60,
+0,0,
+},
+//[42] cell:0x42
+{
+8,8,
+63,252,
+60,0,
+60,0,
+63,192,
+60,0,
+60,0,
+63,252,
+0,0,
+},
+//[43] cell:0x43
+{
+8,8,
+15,240,
+60,60,
+60,0,
+15,240,
+0,60,
+60,60,
+15,240,
+0,0,
+},
+//[44] cell:0x44
+{
+8,8,
+48,28,
+48,11,
+48,0,
+48,0,
+48,0,
+48,1,
+48,11,
+48,28,
+},
+//[45] cell:0x45
+{
+8,8,
+15,240,
+60,60,
+60,0,
+60,0,
+60,0,
+60,60,
+15,240,
+0,0,
+},
+//[46] cell:0x46
+{
+8,8,
+15,240,
+60,60,
+60,60,
+60,60,
+60,60,
+60,60,
+15,240,
+0,0,
+},
+//[47] cell:0x47
+{
+8,8,
+63,240,
+60,60,
+60,60,
+63,240,
+63,192,
+60,240,
+60,60,
+0,0,
+},
+//[48] cell:0x48
+{
+8,8,
+48,28,
+48,11,
+48,0,
+28,0,
+13,64,
+3,213,
+0,127,
+0,0,
+},
+//[49] cell:0x49
+{
+8,8,
+48,28,
+224,28,
+0,28,
+0,116,
+1,112,
+87,192,
+253,0,
+0,0,
+},
+//[50] cell:0x50
+{
+8,8,
+60,60,
+60,60,
+60,60,
+60,60,
+60,60,
+15,240,
+3,192,
+0,0,
+},
+//[51] cell:0x51
+{
+8,8,
+60,60,
+60,60,
+15,240,
+3,192,
+15,240,
+60,60,
+60,60,
+0,0,
+},
+//[52] cell:0x52
+{
+8,8,
+63,252,
+3,192,
+3,192,
+3,192,
+3,192,
+3,192,
+3,192,
+0,0,
+},
+};
+
+const byte PROGMEM shapeMap[]={
+1,1,1,1, 2,3,3,3, 1,1,1,1, 1,1,1,1,
+1,2,1,1, 1,4,1,1, 1,4,1,1, 1,4,1,1,
+1,1,1,1, 2,3,3,3, 1,1,1,1, 1,1,1,1,
+1,2,1,1, 1,4,1,1, 1,4,1,1, 1,4,1,1,
+
+1,1,1,1, 2,3,1,1, 1,4,3,1, 1,1,1,1,
+1,1,2,1, 1,2,5,1, 1,4,1,1, 1,1,1,1,
+1,1,1,1, 2,3,1,1, 1,4,3,1, 1,1,1,1,
+1,1,2,1, 1,2,5,1, 1,4,1,1, 1,1,1,1,
+
+1,1,1,1, 1,2,3,1, 2,5,1,1, 1,1,1,1,
+1,2,1,1, 1,4,3,1, 1,1,4,1, 1,1,1,1,
+1,1,1,1, 1,2,3,1, 2,5,1,1, 1,1,1,1,
+1,2,1,1, 1,4,3,1, 1,1,4,1, 1,1,1,1,
+
+1,1,1,1, 1,2,3,1, 1,4,6,1, 1,1,1,1,
+1,1,1,1, 1,2,3,1, 1,4,6,1, 1,1,1,1,
+1,1,1,1, 1,2,3,1, 1,4,6,1, 1,1,1,1,
+1,1,1,1, 1,2,3,1, 1,4,6,1, 1,1,1,1,
+
+1,1,1,1, 2,3,3,1, 4,1,1,1, 1,1,1,1,
+2,3,1,1, 1,4,1,1, 1,4,1,1, 1,1,1,1,
+1,1,2,1, 2,3,5,1, 1,1,1,1, 1,1,1,1,
+1,2,1,1, 1,4,1,1, 1,4,3,1, 1,1,1,1,
+
+1,1,1,1, 2,3,3,1, 1,1,4,1, 1,1,1,1,
+1,2,1,1, 1,4,1,1, 2,5,1,1, 1,1,1,1,
+2,1,1,1, 4,3,3,1, 1,1,1,1, 1,1,1,1,
+1,2,3,1, 1,4,1,1, 1,4,1,1, 1,1,1,1,
+
+1,2,1,1, 2,5,3,1, 1,1,1,1, 1,1,1,1,
+1,2,1,1, 1,4,3,1, 1,4,1,1, 1,1,1,1,
+1,1,1,1, 2,3,3,1, 1,4,1,1, 1,1,1,1,
+1,2,1,1, 2,5,1,1, 1,4,1,1, 1,1,1,1,
+};
+
+const byte PROGMEM bg_map[]={
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,3,3,3,1,1,1,1,2,3,1,1,1,
+1,2,3,1,1,2,1,1,1,1,2,1,1,2,3,3,1,1,1,2,3,1,2,4,1,1,2,1,
+2,4,1,1,2,5,3,1,2,2,4,1,2,3,5,1,1,2,1,5,6,1,1,1,1,2,4,3,
+2,3,3,2,4,3,5,1,5,2,5,1,1,5,3,1,1,5,1,1,2,3,1,7,2,3,1,2,
+5,1,2,2,1,1,1,2,4,5,3,2,3,2,1,2,3,5,1,2,4,7,8,9,5,6,2,4,
+1,2,4,5,3,3,1,2,3,5,1,1,5,5,1,5,6,5,1,1,1,1,10,11,1,2,3,5,
+1,5,10,11,2,3,3,3,5,3,1,2,5,5,1,2,3,3,1,2,3,3,3,12,1,7,5,3,
+1,1,12,13,1,10,11,1,10,1,2,4,3,5,1,2,5,10,10,1,10,11,1,12,10,14,8,10,
+1,10,11,11,7,8,12,11,12,10,11,11,10,11,2,4,10,15,12,11,12,13,10,11,15,14,10,15,
+7,8,12,1,1,14,8,10,15,12,1,10,12,13,5,10,12,1,12,7,8,8,10,11,11,11,7,12,
+14,1,1,16,17,17,10,11,7,8,8,12,11,1,10,15,16,1,1,14,7,8,1,7,7,8,9,1,
+14,10,11,11,18,7,8,12,11,7,14,12,10,11,7,12,18,10,11,7,9,1,7,9,8,7,1,1,
+1,12,7,8,7,14,19,7,7,14,8,8,12,13,14,1,18,17,12,11,7,8,8,8,16,14,8,7,
+16,7,9,1,14,8,8,14,14,8,20,7,8,7,9,16,17,7,8,8,1,20,21,21,18,14,16,14,
+18,17,17,7,8,8,8,14,14,20,22,14,19,20,21,18,23,14,20,20,21,21,24,25,18,1,18,14,
+16,20,21,16,17,17,20,14,20,24,1,20,20,21,24,20,21,20,22,1,24,25,26,27,18,16,28,20,
+18,17,24,21,18,20,24,20,22,25,20,22,24,29,24,25,24,21,24,25,26,26,25,25,16,17,17,24,
+18,25,26,1,1,24,24,21,24,30,24,25,26,26,26,30,26,26,25,26,30,25,27,30,20,21,18,24,
+25,27,20,25,20,22,20,31,25,27,25,26,26,26,20,21,25,26,26,30,26,30,25,27,20,24,21,24,
+1,20,22,30,20,21,22,30,26,26,25,26,25,26,25,24,21,30,20,25,26,26,20,20,22,21,1,25,
+25,26,24,30,25,26,25,1,1,25,27,25,27,25,27,26,20,21,22,30,20,21,22,25,25,26,25,27,
+1,30,26,30,30,32,30,26,26,1,25,26,25,26,26,1,25,26,25,26,26,26,25,27,26,30,26,30,
+
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,3,3,3,1,1,1,1,2,3,1,1,1,
+1,2,3,1,1,2,1,33,34,34,34,34,34,34,34,34,34,34,35,2,3,1,2,4,1,1,2,1,
+2,4,1,1,2,5,3,36,1,1,1,1,1,1,1,1,1,1,36,5,6,1,1,1,1,2,4,3,
+2,3,3,2,4,3,5,36,1,1,1,1,1,1,1,1,1,1,36,1,2,3,1,7,2,3,1,2,
+5,37,34,34,34,34,34,38,1,1,1,1,1,1,1,1,1,1,36,2,4,7,8,9,5,6,2,4,
+1,36,39,40,41,42,43,36,1,1,1,1,1,1,1,1,1,1,44,34,34,34,34,34,35,2,3,5,
+1,36,1,1,1,1,1,36,1,1,1,1,1,1,1,1,1,1,36,43,45,46,47,42,36,7,5,3,
+1,48,34,34,34,34,34,38,1,1,1,1,1,1,1,1,1,1,36,1,1,1,1,1,36,14,8,10,
+1,10,11,11,7,8,1,36,1,1,1,1,1,1,1,1,1,1,44,34,34,34,34,34,49,14,10,15,
+7,8,12,1,1,14,8,36,1,1,1,1,1,1,1,1,1,1,36,7,8,8,10,11,11,11,7,12,
+14,37,34,34,34,34,34,38,1,1,1,1,1,1,1,1,1,1,36,14,7,8,1,7,7,8,9,1,
+14,36,39,42,50,42,39,36,1,1,1,1,1,1,1,1,1,1,36,7,9,1,7,9,8,7,1,1,
+1,36,1,1,1,1,1,36,1,1,1,1,1,1,1,1,1,1,44,34,34,34,34,35,16,14,8,7,
+16,48,34,34,34,34,34,38,1,1,1,1,1,1,1,1,1,1,36,41,42,51,52,36,18,14,16,14,
+18,17,17,7,8,8,8,36,1,1,1,1,1,1,1,1,1,1,36,1,1,1,1,36,18,1,18,14,
+16,20,21,16,17,17,16,36,1,1,1,1,1,1,1,1,1,1,36,1,1,1,1,36,18,16,28,20,
+18,17,24,21,18,20,18,36,1,1,1,1,1,1,1,1,1,1,36,1,1,1,1,36,16,17,17,24,
+18,25,26,1,1,24,18,36,1,1,1,1,1,1,1,1,1,1,36,1,1,1,1,36,20,21,18,24,
+25,27,20,25,20,22,20,36,1,1,1,1,1,1,1,1,1,1,44,34,34,34,34,49,20,24,21,24,
+1,20,22,30,20,21,22,36,1,1,1,1,1,1,1,1,1,1,36,25,26,26,20,20,22,21,1,25,
+25,26,24,30,25,26,25,48,34,34,34,34,34,34,34,34,34,34,49,30,20,21,22,25,25,26,25,27,
+1,30,26,30,30,32,30,26,26,1,25,26,25,26,26,1,25,26,25,26,26,26,25,27,26,30,26,30,
+};
+
+const uint8_t title_bitmap[] =
+{
+192,48,
+85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,
+85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,
+85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,
+85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,
+85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,127,255,253,85,85,85,127,255,253,85,127,255,253,85,127,255,253,85,85,85,85,85,127,255,253,85,85,85,85,85,85,
+85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,121,85,173,85,85,85,121,85,173,85,121,85,173,85,121,85,173,85,85,85,85,85,121,85,173,85,85,85,85,85,85,
+85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,208,0,117,85,85,85,208,0,117,85,208,0,117,85,208,0,117,85,85,85,85,85,208,0,117,85,85,85,85,85,85,
+85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,208,0,117,85,85,85,208,0,117,85,208,0,117,85,208,0,117,85,85,85,85,85,208,0,117,85,85,85,85,85,85,
+85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,87,64,1,213,85,85,87,64,1,213,87,64,1,213,87,64,1,213,85,85,85,85,87,64,1,213,85,85,85,85,85,85,
+85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,87,64,1,213,85,85,87,64,1,213,87,64,1,213,87,64,1,213,85,85,85,85,87,64,1,213,85,85,85,85,85,85,
+85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,93,0,7,85,85,85,93,0,7,85,93,0,7,85,93,0,7,85,85,85,85,85,93,0,7,85,85,85,85,85,85,85,
+85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,93,0,7,85,85,85,94,85,91,85,93,0,7,85,93,0,7,85,85,85,85,85,94,85,91,85,85,85,85,85,85,85,
+85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,93,0,7,85,85,85,95,255,255,85,93,0,7,85,93,0,7,85,85,85,85,85,95,255,255,85,85,85,85,85,85,85,
+85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,116,0,29,85,85,85,85,85,85,85,116,0,29,85,116,0,29,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,
+85,85,85,85,85,127,255,253,85,85,85,127,255,253,85,85,116,0,31,255,255,255,255,255,255,255,244,0,31,255,244,0,31,255,255,255,255,255,255,255,253,127,255,255,255,255,213,85,
+85,85,85,85,87,213,85,87,245,85,87,213,85,87,245,85,208,0,5,85,85,86,229,85,185,85,180,0,5,85,180,0,5,86,249,85,85,86,229,85,191,213,85,85,85,86,213,85,
+85,85,85,85,93,64,0,1,95,85,93,64,0,1,95,85,208,0,0,0,0,1,208,0,116,0,116,0,0,0,116,0,0,1,244,0,0,1,208,0,125,64,0,0,0,1,213,85,
+85,85,85,85,116,0,0,0,5,213,116,0,0,0,5,215,64,0,0,0,0,7,64,1,208,0,116,0,0,0,116,0,0,7,180,0,0,7,64,1,228,0,0,0,0,7,85,85,
+85,85,85,85,244,0,0,0,0,117,244,0,0,0,0,119,64,0,0,0,0,7,64,1,208,0,29,0,0,0,29,0,0,7,157,0,0,7,64,1,208,0,0,0,0,7,85,85,
+85,85,85,87,180,0,0,0,0,119,180,0,0,0,0,127,64,0,0,0,0,7,64,1,208,0,29,0,0,0,29,0,0,7,93,0,0,7,64,1,208,0,0,0,0,7,85,85,
+85,85,85,93,93,0,0,0,0,29,93,0,0,0,0,31,64,0,0,0,0,29,0,7,64,0,29,0,0,0,29,0,0,29,29,0,0,29,0,7,64,0,0,0,0,29,85,85,
+85,85,85,93,29,0,0,0,0,29,29,0,0,0,0,31,64,0,0,0,0,29,0,7,64,0,7,80,0,0,7,80,0,29,7,80,0,29,0,7,64,0,0,0,0,29,85,85,
+85,85,85,116,7,85,85,0,0,116,7,85,85,0,0,123,64,0,85,85,85,180,0,30,149,80,1,245,85,80,1,245,85,180,1,245,85,180,0,29,0,5,85,85,85,181,85,85,
+85,85,85,116,7,191,255,64,0,116,7,191,255,64,0,117,208,0,255,255,255,244,0,31,255,240,0,111,255,240,0,111,255,244,0,111,255,244,0,29,0,63,255,255,255,245,85,85,
+85,85,85,208,1,213,85,208,1,208,1,213,85,208,1,209,208,0,117,85,85,224,0,117,85,224,0,117,85,224,0,117,85,224,0,117,85,224,0,116,0,5,85,91,213,85,85,85,
+85,85,85,208,1,213,85,208,1,208,1,213,85,208,1,209,208,0,29,85,85,208,0,117,85,208,0,117,85,208,0,117,85,208,0,117,85,208,0,116,0,0,0,1,117,85,85,85,
+85,85,85,208,1,213,85,208,1,208,1,213,85,208,1,208,116,0,7,85,85,208,0,117,85,208,0,117,85,208,0,117,85,208,0,117,85,208,0,180,0,0,0,0,29,85,85,85,
+85,85,87,64,7,85,87,64,7,64,7,85,87,64,7,64,116,0,7,85,87,64,1,213,87,64,1,213,87,64,1,213,87,64,1,213,87,64,1,244,0,0,0,0,29,85,85,85,
+85,85,87,64,7,85,87,64,7,64,7,85,87,64,7,64,29,0,1,213,87,64,1,213,87,64,1,213,87,64,1,213,87,64,1,213,87,64,1,221,64,0,0,0,7,85,85,85,
+85,85,93,0,29,85,93,0,29,0,29,85,93,0,29,0,29,0,0,117,93,0,7,85,93,0,7,85,93,0,7,85,93,0,7,85,93,0,7,87,213,0,0,0,7,85,85,85,
+85,85,93,0,29,85,93,0,29,0,29,85,93,0,29,0,23,64,0,117,93,0,7,85,93,0,7,85,93,0,7,85,93,0,7,85,93,0,7,85,127,85,64,0,29,85,85,85,
+85,85,92,0,7,255,244,0,116,0,7,255,244,0,116,0,29,208,0,29,116,0,29,85,116,0,29,85,116,0,29,85,116,0,29,85,116,0,31,255,255,255,240,0,29,85,85,85,
+85,85,116,0,1,86,224,0,116,0,1,86,224,0,116,0,29,116,0,7,244,0,29,85,116,0,29,85,116,0,29,85,116,0,29,85,116,0,29,85,85,85,64,0,117,85,85,85,
+85,85,116,0,0,1,208,0,116,0,0,1,208,0,116,0,29,116,0,1,180,0,29,85,116,0,29,85,116,0,29,85,116,0,29,85,116,0,29,0,0,0,0,0,117,85,85,85,
+85,85,116,0,0,0,116,1,221,0,0,0,116,1,208,0,117,93,0,1,208,0,117,85,208,0,117,85,208,0,117,85,208,0,117,85,208,0,116,0,0,0,0,1,213,85,85,85,
+85,85,208,0,0,0,116,7,93,0,0,0,116,7,64,0,117,87,64,1,208,0,117,85,208,0,117,85,208,0,117,85,208,0,117,85,208,0,116,0,0,0,0,7,85,85,85,85,
+85,85,208,0,0,0,29,29,87,80,0,0,29,31,64,1,213,87,64,7,64,1,213,87,64,1,213,87,64,1,213,87,64,1,213,87,64,1,208,0,0,0,0,29,85,85,85,85,
+85,87,64,0,0,0,30,117,85,245,64,0,30,123,64,1,213,85,212,7,64,1,213,87,64,1,213,87,64,1,213,87,64,1,213,87,64,1,208,0,0,0,1,117,85,85,85,85,
+85,87,64,0,85,85,107,213,85,95,213,85,107,222,149,91,85,85,125,110,149,91,85,94,149,91,85,94,149,91,85,94,149,91,85,94,149,91,165,85,85,85,87,213,85,85,85,85,
+85,93,0,1,255,255,253,85,85,85,127,255,253,95,255,255,85,85,87,255,255,255,85,95,255,255,85,95,255,255,85,95,255,255,85,95,255,255,255,255,255,255,253,85,85,85,85,85,
+85,93,0,7,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,
+85,93,0,7,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,
+85,116,0,29,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,
+85,116,0,29,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,
+85,208,0,117,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,
+85,208,0,117,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,
+87,165,86,213,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,
+87,255,255,213,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,
+};
+
+const uint8_t title_mask[] =
+{
+192,48,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21,85,84,0,0,0,21,85,84,0,21,85,84,0,21,85,84,0,0,0,0,0,21,85,84,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21,85,84,0,0,0,21,85,84,0,21,85,84,0,21,85,84,0,0,0,0,0,21,85,84,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,85,85,80,0,0,0,85,85,80,0,85,85,80,0,85,85,80,0,0,0,0,0,85,85,80,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,85,85,80,0,0,0,85,85,80,0,85,85,80,0,85,85,80,0,0,0,0,0,85,85,80,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,85,85,64,0,0,1,85,85,64,1,85,85,64,1,85,85,64,0,0,0,0,1,85,85,64,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,85,85,64,0,0,1,85,85,64,1,85,85,64,1,85,85,64,0,0,0,0,1,85,85,64,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,85,85,0,0,0,5,85,85,0,5,85,85,0,5,85,85,0,0,0,0,0,5,85,85,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,85,85,0,0,0,5,85,85,0,5,85,85,0,5,85,85,0,0,0,0,0,5,85,85,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,85,85,0,0,0,5,85,85,0,5,85,85,0,5,85,85,0,0,0,0,0,5,85,85,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21,85,84,0,0,0,0,0,0,0,21,85,84,0,21,85,84,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,21,85,84,0,0,0,21,85,84,0,0,21,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,84,21,85,85,85,85,64,0,
+0,0,0,0,1,85,85,85,80,0,1,85,85,85,80,0,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,64,0,
+0,0,0,0,5,85,85,85,85,0,5,85,85,85,85,0,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,64,0,
+0,0,0,0,21,85,85,85,85,64,21,85,85,85,85,65,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,0,0,
+0,0,0,0,85,85,85,85,85,80,85,85,85,85,85,81,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,0,0,
+0,0,0,1,85,85,85,85,85,81,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,0,0,
+0,0,0,5,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,84,0,0,
+0,0,0,5,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,84,0,0,
+0,0,0,21,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,80,0,0,
+0,0,0,21,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,80,0,0,
+0,0,0,85,85,64,0,85,85,85,85,64,0,85,85,85,85,85,80,0,0,85,85,80,0,85,85,80,0,85,85,80,0,85,85,80,0,85,85,85,85,85,85,85,64,0,0,0,
+0,0,0,85,85,64,0,85,85,85,85,64,0,85,85,85,85,85,84,0,0,85,85,80,0,85,85,80,0,85,85,80,0,85,85,80,0,85,85,85,85,85,85,85,80,0,0,0,
+0,0,0,85,85,64,0,85,85,85,85,64,0,85,85,85,85,85,85,0,0,85,85,80,0,85,85,80,0,85,85,80,0,85,85,80,0,85,85,85,85,85,85,85,84,0,0,0,
+0,0,1,85,85,0,1,85,85,85,85,0,1,85,85,85,85,85,85,0,1,85,85,64,1,85,85,64,1,85,85,64,1,85,85,64,1,85,85,85,85,85,85,85,84,0,0,0,
+0,0,1,85,85,0,1,85,85,85,85,0,1,85,85,85,85,85,85,64,1,85,85,64,1,85,85,64,1,85,85,64,1,85,85,64,1,85,85,69,85,85,85,85,85,0,0,0,
+0,0,5,85,84,0,5,85,85,85,84,0,5,85,85,85,85,85,85,80,5,85,85,0,5,85,85,0,5,85,85,0,5,85,85,0,5,85,85,1,85,85,85,85,85,0,0,0,
+0,0,5,85,84,0,5,85,85,85,84,0,5,85,85,85,85,85,85,80,5,85,85,0,5,85,85,0,5,85,85,0,5,85,85,0,5,85,85,0,21,85,85,85,84,0,0,0,
+0,0,5,85,85,85,85,85,85,85,85,85,85,85,85,85,84,85,85,84,21,85,84,0,21,85,84,0,21,85,84,0,21,85,84,0,21,85,85,85,85,85,85,85,84,0,0,0,
+0,0,21,85,85,85,85,85,85,85,85,85,85,85,85,85,84,21,85,85,85,85,84,0,21,85,84,0,21,85,84,0,21,85,84,0,21,85,85,85,85,85,85,85,80,0,0,0,
+0,0,21,85,85,85,85,85,85,85,85,85,85,85,85,85,84,21,85,85,85,85,84,0,21,85,84,0,21,85,84,0,21,85,84,0,21,85,85,85,85,85,85,85,80,0,0,0,
+0,0,21,85,85,85,85,85,69,85,85,85,85,85,85,85,80,5,85,85,85,85,80,0,85,85,80,0,85,85,80,0,85,85,80,0,85,85,85,85,85,85,85,85,64,0,0,0,
+0,0,85,85,85,85,85,85,5,85,85,85,85,85,85,85,80,1,85,85,85,85,80,0,85,85,80,0,85,85,80,0,85,85,80,0,85,85,85,85,85,85,85,85,0,0,0,0,
+0,0,85,85,85,85,85,84,1,85,85,85,85,85,85,85,64,1,85,85,85,85,64,1,85,85,64,1,85,85,64,1,85,85,64,1,85,85,85,85,85,85,85,84,0,0,0,0,
+0,1,85,85,85,85,85,80,0,85,85,85,85,85,85,85,64,0,85,85,85,85,64,1,85,85,64,1,85,85,64,1,85,85,64,1,85,85,85,85,85,85,85,80,0,0,0,0,
+0,1,85,85,85,85,85,64,0,5,85,85,85,69,85,85,0,0,21,85,85,85,0,5,85,85,0,5,85,85,0,5,85,85,0,5,85,85,85,85,85,85,85,64,0,0,0,0,
+0,5,85,85,85,85,84,0,0,0,21,85,84,5,85,85,0,0,1,85,85,85,0,5,85,85,0,5,85,85,0,5,85,85,0,5,85,85,85,85,85,85,84,0,0,0,0,0,
+0,5,85,85,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,5,85,85,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,21,85,84,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,21,85,84,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,85,85,80,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,85,85,80,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+1,85,85,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+1,85,85,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+};
+
+
+const uint8_t gameover_bitmap[] =
+{
+224,34,
+170,170,170,170,191,255,254,170,170,170,191,255,254,170,170,255,255,255,255,255,255,255,255,170,170,170,175,255,255,170,170,170,170,171,255,255,234,170,191,255,254,170,191,255,254,175,255,255,170,170,175,255,255,255,250,170,
+170,170,170,171,213,85,87,250,170,171,213,85,87,250,170,245,85,85,85,181,85,85,85,254,170,170,245,85,85,254,170,170,170,189,85,85,127,170,185,85,110,170,185,85,174,245,85,85,254,170,190,85,85,85,186,170,
+170,170,170,173,64,0,1,95,170,173,64,0,1,95,170,244,0,0,0,116,0,0,0,87,234,171,80,0,0,87,234,170,170,212,0,0,21,250,208,0,30,170,208,0,123,80,0,0,87,234,189,0,0,0,122,170,
+170,170,170,180,0,0,0,5,234,180,0,0,0,5,235,116,0,0,0,116,0,0,0,1,122,173,0,0,0,1,122,170,171,64,0,0,0,94,208,0,58,170,208,0,125,0,0,0,1,122,237,0,0,1,234,170,
+170,170,170,244,0,0,0,0,122,244,0,0,0,0,123,93,0,0,0,29,0,0,0,0,30,189,0,0,0,0,30,170,175,64,0,0,0,7,208,0,122,171,64,1,253,0,0,0,0,30,231,64,0,1,234,170,
+170,170,171,180,0,0,0,0,123,180,0,0,0,0,127,93,0,0,0,29,0,0,0,0,30,237,0,0,0,0,30,170,187,64,0,0,0,7,208,0,122,173,0,1,237,0,0,0,0,30,215,64,0,1,234,170,
+170,170,173,29,0,0,0,0,29,29,0,0,0,0,29,29,0,0,0,29,0,0,0,0,7,71,64,0,0,0,7,170,209,208,0,0,0,1,208,1,234,180,0,7,71,64,0,0,0,7,71,64,0,7,170,170,
+170,170,173,29,0,0,0,0,29,29,0,0,0,0,29,7,80,0,0,7,80,0,0,0,7,71,64,0,0,0,7,170,209,208,0,0,0,1,208,1,234,180,0,15,71,64,0,0,0,7,65,212,0,7,170,170,
+170,170,180,7,85,85,0,0,116,7,85,85,0,0,116,1,245,85,80,1,245,85,80,0,29,1,213,85,64,0,30,171,64,117,85,80,0,7,64,1,234,208,0,29,1,213,85,64,0,29,0,125,85,110,170,170,
+170,170,180,7,191,255,64,0,116,7,191,255,64,0,116,0,111,255,240,0,111,255,240,0,29,1,239,255,208,0,30,171,64,123,255,244,0,7,64,7,171,64,0,125,1,239,255,208,0,29,0,27,255,254,170,170,
+170,170,208,1,234,170,208,1,208,1,234,170,208,1,208,0,122,170,208,0,122,170,208,0,116,0,117,85,64,0,122,173,0,30,170,173,0,29,0,7,171,64,1,244,0,117,85,64,0,120,0,30,170,170,170,170,
+170,170,208,1,234,170,208,1,208,1,234,170,208,1,208,0,122,170,208,0,122,170,208,0,116,0,116,0,0,0,122,173,0,30,170,173,0,29,0,7,173,0,1,244,0,116,0,0,0,116,0,30,170,170,170,170,
+170,170,208,1,234,170,208,1,208,1,234,170,208,1,208,0,122,170,208,0,122,170,208,0,116,0,116,0,0,0,122,173,0,30,170,173,0,29,0,30,180,0,7,180,0,116,0,0,0,116,0,30,170,170,170,170,
+170,171,64,7,170,171,64,7,64,7,170,171,64,7,64,1,234,171,64,1,234,171,64,1,208,1,208,0,0,1,234,180,0,122,170,180,0,116,0,30,180,0,30,208,1,208,0,0,1,208,0,122,170,170,170,170,
+170,171,64,7,170,171,64,7,64,7,170,171,64,7,64,1,234,171,64,1,234,171,64,1,208,1,208,0,0,1,234,180,0,122,170,180,0,116,0,30,208,0,30,208,1,208,0,0,1,208,0,122,170,170,170,170,
+170,173,0,30,170,173,0,29,0,30,170,173,0,29,0,7,170,173,0,7,170,173,0,7,64,7,64,0,0,7,170,208,1,234,170,208,1,208,0,123,64,0,123,64,7,64,0,0,7,64,1,234,170,170,170,170,
+170,173,0,30,170,173,0,29,0,30,170,173,0,29,0,7,170,173,0,7,170,173,0,7,64,7,85,85,85,94,170,208,1,234,170,208,1,208,0,127,64,1,235,64,7,85,85,85,95,64,1,234,170,170,170,170,
+170,180,0,7,255,244,0,116,0,7,255,244,0,116,0,30,170,180,0,30,170,180,0,29,0,1,255,255,255,250,171,64,0,127,255,64,7,64,0,21,0,1,237,0,1,255,255,255,253,0,7,170,170,170,170,170,
+170,180,0,1,86,224,0,116,0,1,86,224,0,116,0,30,170,180,0,30,170,180,0,29,0,0,85,186,170,170,171,64,0,21,110,0,7,64,0,0,0,7,173,0,0,85,186,170,173,0,7,170,170,170,170,170,
+170,180,0,0,1,208,0,116,0,0,0,116,0,116,0,30,170,180,0,30,170,180,0,29,0,0,0,122,170,170,171,64,0,0,29,0,7,64,0,0,0,30,173,0,0,0,122,170,173,0,7,170,170,170,170,170,
+170,173,0,0,0,116,1,237,0,0,0,116,1,208,0,122,170,208,0,122,170,208,0,123,64,0,0,30,170,170,170,208,0,0,7,64,29,0,0,0,0,30,171,64,0,0,30,170,180,0,30,170,170,170,170,170,
+170,173,0,0,0,116,7,173,0,0,0,29,1,208,0,122,170,208,0,122,170,208,0,123,64,0,0,30,170,170,170,208,0,0,7,64,125,0,0,0,0,122,171,64,0,0,30,170,180,0,30,170,170,170,170,170,
+170,171,80,0,0,29,7,171,80,0,0,7,71,64,1,234,171,64,1,234,171,64,1,234,212,0,0,7,170,170,170,181,0,0,1,209,235,80,0,0,1,234,170,212,0,0,7,170,208,0,122,170,170,170,170,170,
+170,170,245,64,0,30,30,170,245,64,0,7,71,64,1,234,171,64,1,234,171,64,1,234,189,80,0,7,170,170,170,175,84,0,1,231,170,245,64,0,7,170,170,189,80,0,7,170,208,0,122,170,170,170,170,170,
+170,170,175,213,80,11,222,170,175,213,85,85,238,149,91,170,174,149,91,170,174,149,91,170,171,245,85,86,234,170,170,170,253,85,86,190,170,175,213,85,94,170,170,171,245,85,86,235,165,86,234,170,170,170,170,170,
+170,255,255,255,244,1,186,170,170,191,255,255,255,255,255,170,175,255,255,170,175,255,255,170,170,175,255,255,234,170,170,170,171,255,255,234,170,170,191,255,254,170,170,170,175,255,255,235,255,255,234,170,170,170,170,170,
+171,85,85,85,80,0,122,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,
+171,64,0,0,0,0,122,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,
+173,0,0,0,0,1,234,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,
+173,0,0,0,0,7,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,
+180,0,0,0,0,30,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,
+180,0,0,0,0,122,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,
+233,85,85,85,91,234,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,
+255,255,255,255,254,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,
+};
+
+
+const uint8_t gameover_mask[] =
+{
+224,34,
+0,0,0,0,21,85,84,0,0,0,21,85,84,0,0,85,85,85,85,85,85,85,85,0,0,0,5,85,85,0,0,0,0,1,85,85,64,0,21,85,84,0,21,85,84,5,85,85,0,0,5,85,85,85,80,0,
+0,0,0,1,85,85,85,80,0,1,85,85,85,80,0,85,85,85,85,85,85,85,85,84,0,0,85,85,85,84,0,0,0,21,85,85,85,0,21,85,84,0,21,85,84,85,85,85,84,0,21,85,85,85,80,0,
+0,0,0,5,85,85,85,85,0,5,85,85,85,85,0,85,85,85,85,85,85,85,85,85,64,1,85,85,85,85,64,0,0,85,85,85,85,80,85,85,84,0,85,85,81,85,85,85,85,64,21,85,85,85,80,0,
+0,0,0,21,85,85,85,85,64,21,85,85,85,85,65,85,85,85,85,85,85,85,85,85,80,5,85,85,85,85,80,0,1,85,85,85,85,84,85,85,80,0,85,85,85,85,85,85,85,80,85,85,85,85,64,0,
+0,0,0,85,85,85,85,85,80,85,85,85,85,85,81,85,85,85,85,85,85,85,85,85,84,21,85,85,85,85,84,0,5,85,85,85,85,85,85,85,80,1,85,85,85,85,85,85,85,84,85,85,85,85,64,0,
+0,0,1,85,85,85,85,85,81,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,84,85,85,85,85,85,84,0,21,85,85,85,85,85,85,85,80,5,85,85,85,85,85,85,85,84,85,85,85,85,64,0,
+0,0,5,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,0,85,85,85,85,85,85,85,85,64,21,85,85,85,85,85,85,85,85,85,85,85,85,0,0,
+0,0,5,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,0,85,85,85,85,85,85,85,85,64,21,85,85,85,85,85,85,85,85,85,85,85,85,0,0,
+0,0,21,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,84,1,85,85,85,85,85,85,85,85,64,85,85,85,85,85,85,85,85,85,85,85,85,84,0,0,
+0,0,21,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,84,1,85,85,85,85,85,85,85,85,1,85,85,85,85,85,85,85,85,85,85,85,85,84,0,0,
+0,0,85,85,64,0,85,85,85,85,64,0,85,85,85,85,80,0,85,85,80,0,85,85,85,85,85,85,85,85,80,5,85,84,0,5,85,85,85,85,1,85,85,85,85,85,85,85,85,85,85,84,0,0,0,0,
+0,0,85,85,64,0,85,85,85,85,64,0,85,85,85,85,80,0,85,85,80,0,85,85,85,85,85,85,85,85,80,5,85,84,0,5,85,85,85,85,5,85,85,85,85,85,85,85,85,85,85,84,0,0,0,0,
+0,0,85,85,64,0,85,85,85,85,64,0,85,85,85,85,80,0,85,85,80,0,85,85,85,85,85,85,85,85,80,5,85,84,0,5,85,85,85,84,21,85,85,21,85,85,85,85,85,85,85,84,0,0,0,0,
+0,1,85,85,0,1,85,85,85,85,0,1,85,85,85,85,64,1,85,85,64,1,85,85,85,85,85,85,85,85,64,21,85,80,0,21,85,85,85,84,21,85,84,85,85,85,85,85,85,85,85,80,0,0,0,0,
+0,1,85,85,0,1,85,85,85,85,0,1,85,85,85,85,64,1,85,85,64,1,85,85,85,85,85,85,85,85,64,21,85,80,0,21,85,85,85,84,85,85,84,85,85,85,85,85,85,85,85,80,0,0,0,0,
+0,5,85,84,0,5,85,85,85,84,0,5,85,85,85,85,0,5,85,85,0,5,85,85,85,85,85,85,85,85,0,85,85,64,0,85,85,85,85,81,85,85,81,85,85,85,85,85,85,85,85,64,0,0,0,0,
+0,5,85,84,0,5,85,85,85,84,0,5,85,85,85,85,0,5,85,85,0,5,85,85,85,85,85,85,85,84,0,85,85,64,0,85,85,85,85,85,85,85,65,85,85,85,85,85,85,85,85,64,0,0,0,0,
+0,21,85,85,85,85,85,85,85,85,85,85,85,85,85,84,0,21,85,84,0,21,85,85,85,85,85,85,85,80,1,85,85,85,85,85,85,85,85,85,85,85,69,85,85,85,85,85,85,85,85,0,0,0,0,0,
+0,21,85,85,85,85,85,85,85,85,85,85,85,85,85,84,0,21,85,84,0,21,85,85,85,85,85,80,0,0,1,85,85,85,85,85,85,85,85,85,85,85,5,85,85,85,80,0,5,85,85,0,0,0,0,0,
+0,21,85,85,85,85,85,85,85,85,85,85,85,85,85,84,0,21,85,84,0,21,85,85,85,85,85,80,0,0,1,85,85,85,85,85,85,85,85,85,85,84,5,85,85,85,80,0,5,85,85,0,0,0,0,0,
+0,5,85,85,85,85,85,69,85,85,85,85,85,85,85,80,0,85,85,80,0,85,85,81,85,85,85,84,0,0,0,85,85,85,85,85,85,85,85,85,85,84,1,85,85,85,84,0,21,85,84,0,0,0,0,0,
+0,5,85,85,85,85,85,5,85,85,85,85,85,85,85,80,0,85,85,80,0,85,85,81,85,85,85,84,0,0,0,85,85,85,85,85,85,85,85,85,85,80,1,85,85,85,84,0,21,85,84,0,0,0,0,0,
+0,1,85,85,85,85,85,1,85,85,85,85,85,85,85,64,1,85,85,64,1,85,85,64,85,85,85,85,0,0,0,21,85,85,85,85,65,85,85,85,85,64,0,85,85,85,85,0,85,85,80,0,0,0,0,0,
+0,0,85,85,85,85,84,0,85,85,85,85,85,85,85,64,1,85,85,64,1,85,85,64,21,85,85,85,0,0,0,5,85,85,85,85,0,85,85,85,85,0,0,21,85,85,85,0,85,85,80,0,0,0,0,0,
+0,0,5,85,85,85,84,0,5,85,85,85,85,85,85,0,5,85,85,0,5,85,85,0,1,85,85,85,64,0,0,0,85,85,85,84,0,5,85,85,84,0,0,1,85,85,85,65,85,85,64,0,0,0,0,0,
+0,85,85,85,85,85,80,0,0,21,85,85,85,85,85,0,5,85,85,0,5,85,85,0,0,5,85,85,64,0,0,0,1,85,85,64,0,0,21,85,84,0,0,0,5,85,85,65,85,85,64,0,0,0,0,0,
+1,85,85,85,85,85,80,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+1,85,85,85,85,85,80,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+5,85,85,85,85,85,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+5,85,85,85,85,85,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+21,85,85,85,85,84,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+21,85,85,85,85,80,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+85,85,85,85,85,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+85,85,85,85,84,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+};