 
     }
 
-    void loopGameOver() {
-        buffer.drawText(stringBuffer.start()->load(PSTR("game over"))->get(),20,28,buffer.rgb(255,128,32), &virtualDJ_5ptFontInfo);
-        buffer.drawText(stringBuffer.start()->load(PSTR("score: "))->put(currentScore)->get(),28,38,buffer.rgb(192,192,192), &virtualDJ_5ptFontInfo);
-        if (progressCounter < 50) {
-            progressCounter++;
-        } else {
-            drawButtons();
-            if (ScreenButtonState::wasAnyButtonReleased()) {
-                switchToMainMenu();
-            }
-        }
-    }
 
     void loopAbout() {
         drawDuinoSaysTitle(-24);

        throttle = millis();
    }
};

void Particle::draw(DuinoSays* duinoSays) {
    const uint8_t rel = 255 - frameAge * 255 / maxAge;

    void draw(DuinoSays *duinoSays);
};

class Scores {
private:
    uint16_t score[3];
    char tags[3][3];
    uint8_t trackCount;
public:
    Scores():trackCount(0) {

    }

    char* getTag(uint8_t n) {
        if (n < trackCount) return tags[n];
        return 0;
    }
    uint16_t getScore(uint8_t n) {
        if (n < trackCount) return score[n];
        return 0;
    }
    bool isHighEnough(uint8_t points) {
        return trackCount < 3 || points > score[2];
    }
    void putScore(uint8_t points, char* tag) {
        for (int i=0;i<3;i+=1) {
            if (i >= trackCount || score[i] < points) {
                uint16_t tmpPoints = score[i];
                char tmp[3] = {tags[i][0],tags[i][1],tags[i][2]};
                score[i] = points;
                tags[i][0] = tag[0];
                tags[i][1] = tag[1];
                tags[i][2] = tag[2];
                if (trackCount == i) {
                    trackCount += 1;
                }
                // carry over
                points = tmpPoints;
                tag[0] = tmp[0];
                tag[1] = tmp[1];
                tag[2] = tmp[2];
            }
        }
    }

};

class GameOverScreen {
public:
    void loop(DuinoSays* ds);
};


class DuinoSays {
private:
    uint16_t seed;
    uint16_t currentLevel;
    uint16_t currentStep;
    bool isShowingColors;
    DuinoSaysGameMode mode;
    TinyScreen display;
    GameOverScreen gameOverScreen;
public:
    uint16_t progressCounter;
    uint16_t currentScore;
    Scores scores;
    RenderBuffer<uint16_t,40> buffer;
    ParticleSystem<28> particleSystem;
    Button btnTopLeft;
    Button btnTopRight;
    Button btnBottomLeft;
    Button btnBottomRight;

public:
    DuinoSays():
