 };
 
 void Particle::draw(DuinoSays* duinoSays) {
-    const int height = 24;
+    const uint8_t rel = 255 - frameAge * 255 / maxAge;
+    const bool isButtonParticle = type < 4;
+    const int height = isButtonParticle ? 24 : 8 * rel >> 8;
     frameAge+=1;
 
-    const uint8_t rel = 255 - frameAge * 255 / maxAge;
-    const int width = 16 * rel >> 8;
+    const int width = isButtonParticle ? 16 * rel >> 8 : height;
 
     uint8_t r = 255, g = 0, b = 255;
-    switch (type) {
+    switch (type & 3) {
         case ParticleType::topLeftButton: r = 255, g = 64, b = 32; break;
         case ParticleType::bottomLeftButton: r = 255, g = 255, b = 64; break;
         case ParticleType::topRightButton: r = 32, g = 255, b = 32; break;

            if (currentStep > currentLevel) {
                nextLevel();
            } else {
                buffer.drawText(stringBuffer.start()->put(currentStep)->get(),44,52,buffer.rgb(255,128,32), &virtualDJ_5ptFontInfo);
            }
        }


    DuinoSays():
        mode(DSMODE_MAINMENU),
        display(0),
        btnTopLeft(SCREENBUTTON_TOPLEFT, 2, 16, 192,0,0, buffer.rgb(255,0,0)),
        btnTopRight(SCREENBUTTON_TOPRIGHT, 94, 16, 0,192,0, buffer.rgb(0,255,0)),
        btnBottomLeft(SCREENBUTTON_BOTTOMLEFT, 2, 48, 192,192,0, buffer.rgb(255,255,0)),
        btnBottomRight(SCREENBUTTON_BOTTOMRIGHT, 94, 48, 0,0,192, buffer.rgb(64,64,255))
    {

    }

    Button* getButton(uint8_t n) {
        switch (n%4) {
        case SCREENBUTTON_TOPLEFT: return &btnTopLeft;
        case SCREENBUTTON_TOPRIGHT: return &btnTopRight;
        case SCREENBUTTON_BOTTOMLEFT: return &btnBottomLeft;
        case SCREENBUTTON_BOTTOMRIGHT: return &btnBottomRight;
        }
        return 0;
    }
