   }
 }
 
-void fillFrom(uint16_t start, uint16_t finish, uint32_t color)
-{
-    uint16_t i;
-    for(i = start; i<=finish; i++)
-    {
-        strip.setPixelColor(i, color);
-    }
-}
-
-// Input a value 0 to 255 to get a color value.
-// The colours are a transition r - g - b - back to r.
-uint32_t Wheel(byte WheelPos) {
-  if(WheelPos < 85) {
-   return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
-  } else if(WheelPos < 170) {
-   WheelPos -= 85;
-   return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);
-  } else {
-   WheelPos -= 170;
-   return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);
-  }
-}
-
 // Pretends that it is a 30 by 15 Matrix
 uint16_t customMappingFunction (uint16_t x, uint16_t y){
+    if(x > 28 || y > 10)
+    {
+        return 11*15-1;
+    }
     int doubleMaxCountInRow = 30;
     int maxCountInRow = 15;
     int countInRow[11];

        // now add the number of pixels to get to that location in the row
        int leftover = x;
        leftover -= numSpacersPerSide; // removes the excess amount
        leftover = leftover / 2; // divides by two due to the dropping
        leftover++; // add one since we are selecting the "next" pixel
        
        return leftover + pixelCount;
    }else if(((y % 2) > 0) && ((x % 2) > 0)){  // this means that it's an odd row, so all even pixels are dropped in the row


void xsmallHeart()
{
    strip.clear();
    
    fillFrom(48, 49, strip.Color(255, 0, 0));
    fillFrom(46, 47, strip.Color(255, 0, 0));
