Your browser does not support the canvas tag.

previous        Show / Hide Source        Download        next
/* Tianyao Liu
 * Interactive Drawing: Animated Pokemon Jirachi
 * Intro to Media Computation
 *
 * Jirachi will look at your cursor as long as it isn't too close to the bottom, in which case it will start doing some trippy magic
 */

void setup() {
  size(800, 800);
  frameRate(30); //for animation
  rectMode(CENTER);
}

void draw() {
  colorMode(HSB, 360, 100, 100, 100); //HSB is much easier to use for the colour and lighting effects used in this drawing

  //background
  background(217, 100, 33, 100); //dark blue

  //excluding background, every part's coordinates have position formulas
  //horizontal parallax movement relative to mouseX: {+/-}(mouseX-400)/{reciprocal of parallax factor}
  //vertical parallax movement relative to mouseY: {+/-}(mouseY-400)/{reciprocal of parallax factor}
  //breathing movement for both x and y positions (period = (2*PI)/(PI/30) = 2*30 = 60; one breathing cycle every 60 frames, or 2 seconds): {+/-}{movement factor}*sin(PI/30*frameCount)
  //similarly, this formula is used very often for other purposes such as rotation or pulsing animations, sometimes with modifications: {+/-}{factor}*sin(PI/{period/2}*frameCount)
  //some instances of mouseX/mouseY will be replaced with pmouseX/pmouseY for a "trailing" effect

  //star glow; translucent circles behind the stars that pulse continuously
  noStroke();
  fill(192, 50, 100, 50+25*sin(PI/30*frameCount-PI)); //blue with varying opacity
  ellipse(20-(mouseX-400)/10, 300-(mouseY-400)/20, 60+6*sin(PI/30*frameCount), 60+6*sin(PI/30*frameCount));
  ellipse(120-(mouseX-400)/10, 80-(mouseY-400)/20, 60+6*sin(PI/30*frameCount), 60+6*sin(PI/30*frameCount));
  ellipse(560-(mouseX-400)/10, 660-(mouseY-400)/20, 60+6*sin(PI/30*frameCount), 60+6*sin(PI/30*frameCount));
  ellipse(340-(mouseX-400)/10, 740-(mouseY-400)/20, 60+6*sin(PI/30*frameCount), 60+6*sin(PI/30*frameCount));
  ellipse(500-(mouseX-400)/10, 40-(mouseY-400)/20, 30+3*sin(PI/30*frameCount), 30+3*sin(PI/30*frameCount));
  ellipse(660-(mouseX-400)/10, 140-(mouseY-400)/20, 30+3*sin(PI/30*frameCount), 30+3*sin(PI/30*frameCount));
  ellipse(800-(mouseX-400)/10, 520-(mouseY-400)/20, 30+3*sin(PI/30*frameCount), 30+3*sin(PI/30*frameCount));
  ellipse(180-(mouseX-400)/10, 640-(mouseY-400)/20, 30+3*sin(PI/30*frameCount), 30+3*sin(PI/30*frameCount));

  //the actual stars; each star is made of two quads, have a "shine" effect
  fill(0, 0, 100, 100); //white
  quad(20-(mouseX-400)/10, 260-(mouseY-400)/20-4*sin(PI/30*frameCount), 30-(mouseX-400)/10, 300-(mouseY-400)/20, 20-(mouseX-400)/10, 340-(mouseY-400)/20+4*sin(PI/30*frameCount), 10-(mouseX-400)/10, 300-(mouseY-400)/20);
  quad(20-(mouseX-400)/10, 290-(mouseY-400)/20, 60-(mouseX-400)/10+4*sin(PI/30*frameCount), 300-(mouseY-400)/20, 20-(mouseX-400)/10, 310-(mouseY-400)/20, -20-(mouseX-400)/10-4*sin(PI/30*frameCount), 300-(mouseY-400)/20);
  quad(120-(mouseX-400)/10, 40-(mouseY-400)/20-4*sin(PI/30*frameCount), 130-(mouseX-400)/10, 80-(mouseY-400)/20, 120-(mouseX-400)/10, 120-(mouseY-400)/20+4*sin(PI/30*frameCount), 110-(mouseX-400)/10, 80-(mouseY-400)/20);
  quad(120-(mouseX-400)/10, 70-(mouseY-400)/20, 160-(mouseX-400)/10+4*sin(PI/30*frameCount), 80-(mouseY-400)/20, 120-(mouseX-400)/10, 90-(mouseY-400)/20, 80-(mouseX-400)/10-4*sin(PI/30*frameCount), 80-(mouseY-400)/20);
  quad(560-(mouseX-400)/10, 620-(mouseY-400)/20-4*sin(PI/30*frameCount), 570-(mouseX-400)/10, 660-(mouseY-400)/20, 560-(mouseX-400)/10, 700-(mouseY-400)/20+4*sin(PI/30*frameCount), 550-(mouseX-400)/10, 660-(mouseY-400)/20);
  quad(560-(mouseX-400)/10, 650-(mouseY-400)/20, 600-(mouseX-400)/10+4*sin(PI/30*frameCount), 660-(mouseY-400)/20, 560-(mouseX-400)/10, 670-(mouseY-400)/20, 520-(mouseX-400)/10-4*sin(PI/30*frameCount), 660-(mouseY-400)/20);
  quad(340-(mouseX-400)/10, 700-(mouseY-400)/20-4*sin(PI/30*frameCount), 350-(mouseX-400)/10, 740-(mouseY-400)/20, 340-(mouseX-400)/10, 780-(mouseY-400)/20+4*sin(PI/30*frameCount), 330-(mouseX-400)/10, 740-(mouseY-400)/20);
  quad(340-(mouseX-400)/10, 730-(mouseY-400)/20, 380-(mouseX-400)/10+4*sin(PI/30*frameCount), 740-(mouseY-400)/20, 340-(mouseX-400)/10, 750-(mouseY-400)/20, 300-(mouseX-400)/10-4*sin(PI/30*frameCount), 740-(mouseY-400)/20);
  quad(500-(mouseX-400)/10, 20-(mouseY-400)/20-4*sin(PI/30*frameCount), 505-(mouseX-400)/10, 40-(mouseY-400)/20, 500-(mouseX-400)/10, 60-(mouseY-400)/20+4*sin(PI/30*frameCount), 495-(mouseX-400)/10, 40-(mouseY-400)/20);
  quad(500-(mouseX-400)/10, 35-(mouseY-400)/20, 520-(mouseX-400)/10+4*sin(PI/30*frameCount), 40-(mouseY-400)/20, 500-(mouseX-400)/10, 45-(mouseY-400)/20, 480-(mouseX-400)/10-4*sin(PI/30*frameCount), 40-(mouseY-400)/20);
  quad(660-(mouseX-400)/10, 120-(mouseY-400)/20-4*sin(PI/30*frameCount), 665-(mouseX-400)/10, 140-(mouseY-400)/20, 660-(mouseX-400)/10, 160-(mouseY-400)/20+4*sin(PI/30*frameCount), 655-(mouseX-400)/10, 140-(mouseY-400)/20);
  quad(660-(mouseX-400)/10, 135-(mouseY-400)/20, 680-(mouseX-400)/10+4*sin(PI/30*frameCount), 140-(mouseY-400)/20, 660-(mouseX-400)/10, 145-(mouseY-400)/20, 640-(mouseX-400)/10-4*sin(PI/30*frameCount), 140-(mouseY-400)/20);
  quad(800-(mouseX-400)/10, 500-(mouseY-400)/20-4*sin(PI/30*frameCount), 805-(mouseX-400)/10, 520-(mouseY-400)/20, 800-(mouseX-400)/10, 540-(mouseY-400)/20+4*sin(PI/30*frameCount), 795-(mouseX-400)/10, 520-(mouseY-400)/20);
  quad(800-(mouseX-400)/10, 515-(mouseY-400)/20, 820-(mouseX-400)/10+4*sin(PI/30*frameCount), 520-(mouseY-400)/20, 800-(mouseX-400)/10, 525-(mouseY-400)/20, 780-(mouseX-400)/10-4*sin(PI/30*frameCount), 520-(mouseY-400)/20);
  quad(180-(mouseX-400)/10, 620-(mouseY-400)/20-4*sin(PI/30*frameCount), 185-(mouseX-400)/10, 640-(mouseY-400)/20, 180-(mouseX-400)/10, 660-(mouseY-400)/20+4*sin(PI/30*frameCount), 175-(mouseX-400)/10, 640-(mouseY-400)/20);
  quad(180-(mouseX-400)/10, 635-(mouseY-400)/20, 200-(mouseX-400)/10+4*sin(PI/30*frameCount), 640-(mouseY-400)/20, 180-(mouseX-400)/10, 645-(mouseY-400)/20, 160-(mouseX-400)/10-4*sin(PI/30*frameCount), 640-(mouseY-400)/20);

  //trippy background; will only appear if mouseY > 600; appears over the night sky background and has translucent circles that pulse and spin, as well as one that follows the third eye and pulses violently
  fill((frameCount*4)%360, 100, 40, (-600+mouseY)/2); //flashes rainbow colours
  rect(400, 400, 800, 800);
  fill(60, 50, 100, (-600+mouseY)/4); //yellow
  ellipse(400+(mouseX-400)/20+50*cos(PI/90*frameCount), 400+(mouseY-400)/40+50*sin(PI/90*frameCount), 1000+150*sin(PI/30*frameCount), 1000+150*sin(PI/30*frameCount));
  fill(180, 50, 100, (-600+mouseY)/4); //blue
  ellipse(400+(mouseX-400)/20+50*cos(PI/45*frameCount*-1), 400+(mouseY-400)/40+50*sin(PI/45*frameCount*-1), 600+100*sin(PI/15*frameCount-HALF_PI), 600+100*sin(PI/15*frameCount-HALF_PI));
  fill(0, 0, 100, (-600+mouseY)/4); //white
  ellipse(400+(mouseX-400)/6.5, 580+(mouseY-400)/13-2*sin(PI/30*frameCount*-1), 300+50*sin(PI/3*frameCount-PI), 300+50*sin(PI/3*frameCount-PI));

  //back glow; is always there unlike the other wacky effects, pulsing translucent circles behind Jirachi
  fill(0, 0, 100, 12+6*sin(PI/30*frameCount)); //white with varying opacity
  ellipse(400+(mouseX-400)/20, 400+(mouseY-400)/40, 600+50*sin(PI/30*frameCount-PI), 600+50*sin(PI/30*frameCount-PI));
  ellipse(400+(mouseX-400)/20, 400+(mouseY-400)/40, 480+50*sin(PI/30*frameCount-PI), 480+50*sin(PI/30*frameCount-PI));

  //All body parts have a breathing animation and move relative to the cursor; arranged and animated in a way such that illusion of depth is achieved

  //streamer wing things; have "flowing in the wind" effect and trailing effect
  strokeWeight(3);
  stroke(50, 100, 100, 100); //yellow
  fill(50, 50, 100, 100); //bright yellow
  //right; relative to viewer
  beginShape();
  curveVertex(440+(mouseX-400)/15, 480+(mouseY-400)/30);
  curveVertex(440+(mouseX-400)/15, 480+(mouseY-400)/30);
  curveVertex(440+(pmouseX-400)/15+120*cos(-PI/18+PI/30*sin(PI/30*frameCount)), 480+(pmouseY-400)/30+120*sin(-PI/18+PI/30*sin(PI/30*frameCount)));
  curveVertex(440+(pmouseX-400)/15+240*cos(-PI/18+PI/30*sin(PI/30*frameCount-PI/4)), 480+(pmouseY-400)/30+240*sin(-PI/18+PI/30*sin(PI/30*frameCount-PI/4)));
  curveVertex(440+(pmouseX-400)/15+360*cos(-PI/18+PI/30*sin(PI/30*frameCount-PI/2)), 480+(pmouseY-400)/30+360*sin(-PI/18+PI/30*sin(PI/30*frameCount-PI/2)));
  curveVertex(440+(pmouseX-400)/15+480*cos(-PI/18+PI/30*sin(PI/30*frameCount-3*PI/4)), 480+(pmouseY-400)/30+480*sin(-PI/18+PI/30*sin(PI/30*frameCount-3*PI/4)));
  curveVertex(440+(pmouseX-400)/15+600*cos(-PI/18+PI/30*sin(PI/30*frameCount-PI)), 480+(pmouseY-400)/30+600*sin(-PI/18+PI/30*sin(PI/30*frameCount-PI)));
  curveVertex(440+(pmouseX-400)/15+600*cos(-PI/18+PI/30*sin(PI/30*frameCount-PI)), 480+(pmouseY-400)/30+600*sin(-PI/18+PI/30*sin(PI/30*frameCount-PI)));
  curveVertex(440+(pmouseX-400)/15+600*cos(PI/18+PI/30*sin(PI/30*frameCount+PI/4)), 480+(pmouseY-400)/30+600*sin(PI/18+PI/30*sin(PI/30*frameCount+PI/4)));
  curveVertex(440+(pmouseX-400)/15+600*cos(PI/18+PI/30*sin(PI/30*frameCount+PI/4)), 480+(pmouseY-400)/30+600*sin(PI/18+PI/30*sin(PI/30*frameCount+PI/4)));
  curveVertex(440+(pmouseX-400)/15+480*cos(PI/18+PI/30*sin(PI/30*frameCount)), 480+(pmouseY-400)/30+480*sin(PI/18+PI/30*sin(PI/30*frameCount)));
  curveVertex(440+(pmouseX-400)/15+360*cos(PI/18+PI/30*sin(PI/30*frameCount-PI/4)), 480+(pmouseY-400)/30+360*sin(PI/18+PI/30*sin(PI/30*frameCount-PI/4)));
  curveVertex(440+(pmouseX-400)/15+240*cos(PI/18+PI/30*sin(PI/30*frameCount-PI/2)), 480+(pmouseY-400)/30+240*sin(PI/18+PI/30*sin(PI/30*frameCount-PI/2)));
  curveVertex(440+(pmouseX-400)/15+120*cos(PI/18+PI/30*sin(PI/30*frameCount-3*PI/4)), 480+(pmouseY-400)/30+120*sin(PI/18+PI/30*sin(PI/30*frameCount-3*PI/4)));
  curveVertex(440+(mouseX-400)/15, 480+(mouseY-400)/30);
  curveVertex(440+(mouseX-400)/15, 480+(mouseY-400)/30);
  endShape();
  //left
  beginShape();
  curveVertex(360+(mouseX-400)/15, 480+(mouseY-400)/30);
  curveVertex(360+(mouseX-400)/15, 480+(mouseY-400)/30);
  curveVertex(360+(pmouseX-400)/15-120*cos(-PI/18+PI/30*sin(PI/30*frameCount)), 480+(pmouseY-400)/30+120*sin(-PI/18+PI/30*sin(PI/30*frameCount)));
  curveVertex(360+(pmouseX-400)/15-240*cos(-PI/18+PI/30*sin(PI/30*frameCount-PI/4)), 480+(pmouseY-400)/30+240*sin(-PI/18+PI/30*sin(PI/30*frameCount-PI/4)));
  curveVertex(360+(pmouseX-400)/15-360*cos(-PI/18+PI/30*sin(PI/30*frameCount-PI/2)), 480+(pmouseY-400)/30+360*sin(-PI/18+PI/30*sin(PI/30*frameCount-PI/2)));
  curveVertex(360+(pmouseX-400)/15-480*cos(-PI/18+PI/30*sin(PI/30*frameCount-3*PI/4)), 480+(pmouseY-400)/30+480*sin(-PI/18+PI/30*sin(PI/30*frameCount-3*PI/4)));
  curveVertex(360+(pmouseX-400)/15-600*cos(-PI/18+PI/30*sin(PI/30*frameCount-PI)), 480+(pmouseY-400)/30+600*sin(-PI/18+PI/30*sin(PI/30*frameCount-PI)));
  curveVertex(360+(pmouseX-400)/15-600*cos(-PI/18+PI/30*sin(PI/30*frameCount-PI)), 480+(pmouseY-400)/30+600*sin(-PI/18+PI/30*sin(PI/30*frameCount-PI)));
  curveVertex(360+(pmouseX-400)/15-600*cos(PI/18+PI/30*sin(PI/30*frameCount+PI/4)), 480+(pmouseY-400)/30+600*sin(PI/18+PI/30*sin(PI/30*frameCount+PI/4)));
  curveVertex(360+(pmouseX-400)/15-600*cos(PI/18+PI/30*sin(PI/30*frameCount+PI/4)), 480+(pmouseY-400)/30+600*sin(PI/18+PI/30*sin(PI/30*frameCount+PI/4)));
  curveVertex(360+(pmouseX-400)/15-480*cos(PI/18+PI/30*sin(PI/30*frameCount)), 480+(pmouseY-400)/30+480*sin(PI/18+PI/30*sin(PI/30*frameCount)));
  curveVertex(360+(pmouseX-400)/15-360*cos(PI/18+PI/30*sin(PI/30*frameCount-PI/4)), 480+(pmouseY-400)/30+360*sin(PI/18+PI/30*sin(PI/30*frameCount-PI/4)));
  curveVertex(360+(pmouseX-400)/15-240*cos(PI/18+PI/30*sin(PI/30*frameCount-PI/2)), 480+(pmouseY-400)/30+240*sin(PI/18+PI/30*sin(PI/30*frameCount-PI/2)));
  curveVertex(360+(pmouseX-400)/15-120*cos(PI/18+PI/30*sin(PI/30*frameCount-3*PI/4)), 480+(pmouseY-400)/30+120*sin(PI/18+PI/30*sin(PI/30*frameCount-3*PI/4)));
  curveVertex(360+(mouseX-400)/15, 480+(mouseY-400)/30);
  curveVertex(360+(mouseX-400)/15, 480+(mouseY-400)/30);
  endShape();
  //bright version; all bright versions of shapes will only appear if mouseY > 600
  strokeWeight(4);
  stroke(0, 0, 100, (-600+mouseY)/2); //white
  fill(50, 25, 100, (-600+mouseY)/2); //bright yellow
  //right
  beginShape();
  curveVertex(440+(mouseX-400)/15, 480+(mouseY-400)/30);
  curveVertex(440+(mouseX-400)/15, 480+(mouseY-400)/30);
  curveVertex(440+(pmouseX-400)/15+120*cos(-PI/18+PI/30*sin(PI/30*frameCount)), 480+(pmouseY-400)/30+120*sin(-PI/18+PI/30*sin(PI/30*frameCount)));
  curveVertex(440+(pmouseX-400)/15+240*cos(-PI/18+PI/30*sin(PI/30*frameCount-PI/4)), 480+(pmouseY-400)/30+240*sin(-PI/18+PI/30*sin(PI/30*frameCount-PI/4)));
  curveVertex(440+(pmouseX-400)/15+360*cos(-PI/18+PI/30*sin(PI/30*frameCount-PI/2)), 480+(pmouseY-400)/30+360*sin(-PI/18+PI/30*sin(PI/30*frameCount-PI/2)));
  curveVertex(440+(pmouseX-400)/15+480*cos(-PI/18+PI/30*sin(PI/30*frameCount-3*PI/4)), 480+(pmouseY-400)/30+480*sin(-PI/18+PI/30*sin(PI/30*frameCount-3*PI/4)));
  curveVertex(440+(pmouseX-400)/15+600*cos(-PI/18+PI/30*sin(PI/30*frameCount-PI)), 480+(pmouseY-400)/30+600*sin(-PI/18+PI/30*sin(PI/30*frameCount-PI)));
  curveVertex(440+(pmouseX-400)/15+600*cos(-PI/18+PI/30*sin(PI/30*frameCount-PI)), 480+(pmouseY-400)/30+600*sin(-PI/18+PI/30*sin(PI/30*frameCount-PI)));
  curveVertex(440+(pmouseX-400)/15+600*cos(PI/18+PI/30*sin(PI/30*frameCount+PI/4)), 480+(pmouseY-400)/30+600*sin(PI/18+PI/30*sin(PI/30*frameCount+PI/4)));
  curveVertex(440+(pmouseX-400)/15+600*cos(PI/18+PI/30*sin(PI/30*frameCount+PI/4)), 480+(pmouseY-400)/30+600*sin(PI/18+PI/30*sin(PI/30*frameCount+PI/4)));
  curveVertex(440+(pmouseX-400)/15+480*cos(PI/18+PI/30*sin(PI/30*frameCount)), 480+(pmouseY-400)/30+480*sin(PI/18+PI/30*sin(PI/30*frameCount)));
  curveVertex(440+(pmouseX-400)/15+360*cos(PI/18+PI/30*sin(PI/30*frameCount-PI/4)), 480+(pmouseY-400)/30+360*sin(PI/18+PI/30*sin(PI/30*frameCount-PI/4)));
  curveVertex(440+(pmouseX-400)/15+240*cos(PI/18+PI/30*sin(PI/30*frameCount-PI/2)), 480+(pmouseY-400)/30+240*sin(PI/18+PI/30*sin(PI/30*frameCount-PI/2)));
  curveVertex(440+(pmouseX-400)/15+120*cos(PI/18+PI/30*sin(PI/30*frameCount-3*PI/4)), 480+(pmouseY-400)/30+120*sin(PI/18+PI/30*sin(PI/30*frameCount-3*PI/4)));
  curveVertex(440+(mouseX-400)/15, 480+(mouseY-400)/30);
  curveVertex(440+(mouseX-400)/15, 480+(mouseY-400)/30);
  endShape();
  //left
  beginShape();
  curveVertex(360+(mouseX-400)/15, 480+(mouseY-400)/30);
  curveVertex(360+(mouseX-400)/15, 480+(mouseY-400)/30);
  curveVertex(360+(pmouseX-400)/15-120*cos(-PI/18+PI/30*sin(PI/30*frameCount)), 480+(pmouseY-400)/30+120*sin(-PI/18+PI/30*sin(PI/30*frameCount)));
  curveVertex(360+(pmouseX-400)/15-240*cos(-PI/18+PI/30*sin(PI/30*frameCount-PI/4)), 480+(pmouseY-400)/30+240*sin(-PI/18+PI/30*sin(PI/30*frameCount-PI/4)));
  curveVertex(360+(pmouseX-400)/15-360*cos(-PI/18+PI/30*sin(PI/30*frameCount-PI/2)), 480+(pmouseY-400)/30+360*sin(-PI/18+PI/30*sin(PI/30*frameCount-PI/2)));
  curveVertex(360+(pmouseX-400)/15-480*cos(-PI/18+PI/30*sin(PI/30*frameCount-3*PI/4)), 480+(pmouseY-400)/30+480*sin(-PI/18+PI/30*sin(PI/30*frameCount-3*PI/4)));
  curveVertex(360+(pmouseX-400)/15-600*cos(-PI/18+PI/30*sin(PI/30*frameCount-PI)), 480+(pmouseY-400)/30+600*sin(-PI/18+PI/30*sin(PI/30*frameCount-PI)));
  curveVertex(360+(pmouseX-400)/15-600*cos(-PI/18+PI/30*sin(PI/30*frameCount-PI)), 480+(pmouseY-400)/30+600*sin(-PI/18+PI/30*sin(PI/30*frameCount-PI)));
  curveVertex(360+(pmouseX-400)/15-600*cos(PI/18+PI/30*sin(PI/30*frameCount+PI/4)), 480+(pmouseY-400)/30+600*sin(PI/18+PI/30*sin(PI/30*frameCount+PI/4)));
  curveVertex(360+(pmouseX-400)/15-600*cos(PI/18+PI/30*sin(PI/30*frameCount+PI/4)), 480+(pmouseY-400)/30+600*sin(PI/18+PI/30*sin(PI/30*frameCount+PI/4)));
  curveVertex(360+(pmouseX-400)/15-480*cos(PI/18+PI/30*sin(PI/30*frameCount)), 480+(pmouseY-400)/30+480*sin(PI/18+PI/30*sin(PI/30*frameCount)));
  curveVertex(360+(pmouseX-400)/15-360*cos(PI/18+PI/30*sin(PI/30*frameCount-PI/4)), 480+(pmouseY-400)/30+360*sin(PI/18+PI/30*sin(PI/30*frameCount-PI/4)));
  curveVertex(360+(pmouseX-400)/15-240*cos(PI/18+PI/30*sin(PI/30*frameCount-PI/2)), 480+(pmouseY-400)/30+240*sin(PI/18+PI/30*sin(PI/30*frameCount-PI/2)));
  curveVertex(360+(pmouseX-400)/15-120*cos(PI/18+PI/30*sin(PI/30*frameCount-3*PI/4)), 480+(pmouseY-400)/30+120*sin(PI/18+PI/30*sin(PI/30*frameCount-3*PI/4)));
  curveVertex(360+(mouseX-400)/15, 480+(mouseY-400)/30);
  curveVertex(360+(mouseX-400)/15, 480+(mouseY-400)/30);
  endShape();

  //arms; both arms are made with one big shape; "sleeves" have trailing effect
  strokeWeight(3);
  stroke(205, 25, 100, 100); //light blue
  fill(0, 0, 100, 100); //white
  beginShape();
  curveVertex(400+(mouseX-400)/12, 460+(mouseY-400)/24-2*sin(PI/30*frameCount));
  curveVertex(400+(mouseX-400)/12, 460+(mouseY-400)/24-2*sin(PI/30*frameCount));
  curveVertex(460+(mouseX-400)/12+2*sin(PI/30*frameCount), 480+(mouseY-400)/24-2*sin(PI/30*frameCount));
  curveVertex(520+(mouseX-400)/12+2*sin(PI/30*frameCount), 520+(mouseY-400)/24-2*sin(PI/30*frameCount));
  curveVertex(580+(mouseX-400)/12+2*sin(PI/30*frameCount), 580+(mouseY-400)/24-2*sin(PI/30*frameCount));
  curveVertex(580+(mouseX-400)/12+2*sin(PI/30*frameCount), 580+(mouseY-400)/24-2*sin(PI/30*frameCount));
  vertex(570+(mouseX-400)/12+2*sin(PI/30*frameCount), 580+(mouseY-400)/24-2*sin(PI/30*frameCount));
  vertex(578+(mouseX-400)/12+2*sin(PI/30*frameCount), 595+(mouseY-400)/24-2*sin(PI/30*frameCount));
  vertex(560+(mouseX-400)/12+2*sin(PI/30*frameCount), 590+(mouseY-400)/24-2*sin(PI/30*frameCount));
  vertex(560+(mouseX-400)/12+2*sin(PI/30*frameCount), 600+(mouseY-400)/24-2*sin(PI/30*frameCount));
  vertex(550+(mouseX-400)/12+2*sin(PI/30*frameCount), 590+(mouseY-400)/24-2*sin(PI/30*frameCount));
  vertex(500+(pmouseX-400)/12+2*sin(PI/30*frameCount), 620+(pmouseY-400)/24-2*sin(PI/30*frameCount));
  vertex(400+(mouseX-400)/12, 520+(mouseY-400)/24-2*sin(PI/30*frameCount));
  vertex(300+(pmouseX-400)/12-2*sin(PI/30*frameCount), 620+(pmouseY-400)/24-2*sin(PI/30*frameCount));
  vertex(250+(mouseX-400)/12-2*sin(PI/30*frameCount), 590+(mouseY-400)/24-2*sin(PI/30*frameCount));
  vertex(240+(mouseX-400)/12-2*sin(PI/30*frameCount), 600+(mouseY-400)/24-2*sin(PI/30*frameCount));
  vertex(240+(mouseX-400)/12-2*sin(PI/30*frameCount), 590+(mouseY-400)/24-2*sin(PI/30*frameCount));
  vertex(222+(mouseX-400)/12-2*sin(PI/30*frameCount), 595+(mouseY-400)/24-2*sin(PI/30*frameCount));
  vertex(230+(mouseX-400)/12-2*sin(PI/30*frameCount), 580+(mouseY-400)/24-2*sin(PI/30*frameCount));
  vertex(220+(mouseX-400)/12-2*sin(PI/30*frameCount), 580+(mouseY-400)/24-2*sin(PI/30*frameCount));
  curveVertex(220+(mouseX-400)/12-2*sin(PI/30*frameCount), 580+(mouseY-400)/24-2*sin(PI/30*frameCount));
  curveVertex(220+(mouseX-400)/12-2*sin(PI/30*frameCount), 580+(mouseY-400)/24-2*sin(PI/30*frameCount));
  curveVertex(280+(mouseX-400)/12-2*sin(PI/30*frameCount), 520+(mouseY-400)/24-2*sin(PI/30*frameCount));
  curveVertex(340+(mouseX-400)/12-2*sin(PI/30*frameCount), 480+(mouseY-400)/24-2*sin(PI/30*frameCount));
  curveVertex(400+(mouseX-400)/12, 460+(mouseY-400)/24-2*sin(PI/30*frameCount));
  curveVertex(400+(mouseX-400)/12, 460+(mouseY-400)/24-2*sin(PI/30*frameCount));
  endShape();
  //bright version
  strokeWeight(4);
  stroke(205, 10, 100, (-600+mouseY)/2); //light blue
  noFill(); //no need to make white even whiter
  beginShape();
  curveVertex(400+(mouseX-400)/12, 460+(mouseY-400)/24-2*sin(PI/30*frameCount));
  curveVertex(400+(mouseX-400)/12, 460+(mouseY-400)/24-2*sin(PI/30*frameCount));
  curveVertex(460+(mouseX-400)/12+2*sin(PI/30*frameCount), 480+(mouseY-400)/24-2*sin(PI/30*frameCount));
  curveVertex(520+(mouseX-400)/12+2*sin(PI/30*frameCount), 520+(mouseY-400)/24-2*sin(PI/30*frameCount));
  curveVertex(580+(mouseX-400)/12+2*sin(PI/30*frameCount), 580+(mouseY-400)/24-2*sin(PI/30*frameCount));
  curveVertex(580+(mouseX-400)/12+2*sin(PI/30*frameCount), 580+(mouseY-400)/24-2*sin(PI/30*frameCount));
  vertex(570+(mouseX-400)/12+2*sin(PI/30*frameCount), 580+(mouseY-400)/24-2*sin(PI/30*frameCount));
  vertex(578+(mouseX-400)/12+2*sin(PI/30*frameCount), 595+(mouseY-400)/24-2*sin(PI/30*frameCount));
  vertex(560+(mouseX-400)/12+2*sin(PI/30*frameCount), 590+(mouseY-400)/24-2*sin(PI/30*frameCount));
  vertex(560+(mouseX-400)/12+2*sin(PI/30*frameCount), 600+(mouseY-400)/24-2*sin(PI/30*frameCount));
  vertex(550+(mouseX-400)/12+2*sin(PI/30*frameCount), 590+(mouseY-400)/24-2*sin(PI/30*frameCount));
  vertex(500+(pmouseX-400)/12+2*sin(PI/30*frameCount), 620+(pmouseY-400)/24-2*sin(PI/30*frameCount));
  vertex(400+(mouseX-400)/12, 520+(mouseY-400)/24-2*sin(PI/30*frameCount));
  vertex(300+(pmouseX-400)/12-2*sin(PI/30*frameCount), 620+(pmouseY-400)/24-2*sin(PI/30*frameCount));
  vertex(250+(mouseX-400)/12-2*sin(PI/30*frameCount), 590+(mouseY-400)/24-2*sin(PI/30*frameCount));
  vertex(240+(mouseX-400)/12-2*sin(PI/30*frameCount), 600+(mouseY-400)/24-2*sin(PI/30*frameCount));
  vertex(240+(mouseX-400)/12-2*sin(PI/30*frameCount), 590+(mouseY-400)/24-2*sin(PI/30*frameCount));
  vertex(222+(mouseX-400)/12-2*sin(PI/30*frameCount), 595+(mouseY-400)/24-2*sin(PI/30*frameCount));
  vertex(230+(mouseX-400)/12-2*sin(PI/30*frameCount), 580+(mouseY-400)/24-2*sin(PI/30*frameCount));
  vertex(220+(mouseX-400)/12-2*sin(PI/30*frameCount), 580+(mouseY-400)/24-2*sin(PI/30*frameCount));
  curveVertex(220+(mouseX-400)/12-2*sin(PI/30*frameCount), 580+(mouseY-400)/24-2*sin(PI/30*frameCount));
  curveVertex(220+(mouseX-400)/12-2*sin(PI/30*frameCount), 580+(mouseY-400)/24-2*sin(PI/30*frameCount));
  curveVertex(280+(mouseX-400)/12-2*sin(PI/30*frameCount), 520+(mouseY-400)/24-2*sin(PI/30*frameCount));
  curveVertex(340+(mouseX-400)/12-2*sin(PI/30*frameCount), 480+(mouseY-400)/24-2*sin(PI/30*frameCount));
  curveVertex(400+(mouseX-400)/12, 460+(mouseY-400)/24-2*sin(PI/30*frameCount));
  curveVertex(400+(mouseX-400)/12, 460+(mouseY-400)/24-2*sin(PI/30*frameCount));
  endShape();

  //body; one big shape
  strokeWeight(4);
  stroke(205, 25, 100, 100); //light blue
  fill(0, 0, 100, 100); //white
  beginShape();
  curveVertex(450+(mouseX-400)/10+3*sin(PI/30*frameCount), 500+(mouseY-400)/20-2*sin(PI/30*frameCount));
  curveVertex(450+(mouseX-400)/10+3*sin(PI/30*frameCount), 500+(mouseY-400)/20-2*sin(PI/30*frameCount));
  curveVertex(480+(mouseX-400)/10+3*sin(PI/30*frameCount), 600+(mouseY-400)/20-2*sin(PI/30*frameCount));
  curveVertex(440+(mouseX-400)/10+3*sin(PI/30*frameCount), 680+(mouseY-400)/20-2*sin(PI/30*frameCount));
  curveVertex(440+(mouseX-400)/10+3*sin(PI/30*frameCount), 680+(mouseY-400)/20-2*sin(PI/30*frameCount));
  vertex(420+(mouseX-400)/10+2*sin(PI/30*frameCount), 660+(mouseY-400)/20-2*sin(PI/30*frameCount));
  vertex(420+(mouseX-400)/10+2*sin(PI/30*frameCount), 660+(mouseY-400)/20-2*sin(PI/30*frameCount));
  vertex(380+(mouseX-400)/10-2*sin(PI/30*frameCount), 660+(mouseY-400)/20-2*sin(PI/30*frameCount));
  vertex(380+(mouseX-400)/10-2*sin(PI/30*frameCount), 660+(mouseY-400)/20-2*sin(PI/30*frameCount));
  vertex(360+(mouseX-400)/10-3*sin(PI/30*frameCount), 680+(mouseY-400)/20-2*sin(PI/30*frameCount));
  curveVertex(360+(mouseX-400)/10-3*sin(PI/30*frameCount), 680+(mouseY-400)/20-2*sin(PI/30*frameCount));
  curveVertex(360+(mouseX-400)/10-3*sin(PI/30*frameCount), 680+(mouseY-400)/20-2*sin(PI/30*frameCount));
  curveVertex(320+(mouseX-400)/10-3*sin(PI/30*frameCount), 600+(mouseY-400)/20-2*sin(PI/30*frameCount));
  curveVertex(350+(mouseX-400)/10-3*sin(PI/30*frameCount), 500+(mouseY-400)/20-2*sin(PI/30*frameCount));
  curveVertex(350+(mouseX-400)/10-3*sin(PI/30*frameCount), 500+(mouseY-400)/20-2*sin(PI/30*frameCount));
  endShape();
  //bright version
  strokeWeight(5);
  stroke(205, 10, 100, (-600+mouseY)/2); //light blue
  noFill();
  beginShape();
  curveVertex(450+(mouseX-400)/10+3*sin(PI/30*frameCount), 500+(mouseY-400)/20-2*sin(PI/30*frameCount));
  curveVertex(450+(mouseX-400)/10+3*sin(PI/30*frameCount), 500+(mouseY-400)/20-2*sin(PI/30*frameCount));
  curveVertex(480+(mouseX-400)/10+3*sin(PI/30*frameCount), 600+(mouseY-400)/20-2*sin(PI/30*frameCount));
  curveVertex(440+(mouseX-400)/10+3*sin(PI/30*frameCount), 680+(mouseY-400)/20-2*sin(PI/30*frameCount));
  curveVertex(440+(mouseX-400)/10+3*sin(PI/30*frameCount), 680+(mouseY-400)/20-2*sin(PI/30*frameCount));
  vertex(420+(mouseX-400)/10+2*sin(PI/30*frameCount), 660+(mouseY-400)/20-2*sin(PI/30*frameCount));
  vertex(420+(mouseX-400)/10+2*sin(PI/30*frameCount), 660+(mouseY-400)/20-2*sin(PI/30*frameCount));
  vertex(380+(mouseX-400)/10-2*sin(PI/30*frameCount), 660+(mouseY-400)/20-2*sin(PI/30*frameCount));
  vertex(380+(mouseX-400)/10-2*sin(PI/30*frameCount), 660+(mouseY-400)/20-2*sin(PI/30*frameCount));
  vertex(360+(mouseX-400)/10-3*sin(PI/30*frameCount), 680+(mouseY-400)/20-2*sin(PI/30*frameCount));
  curveVertex(360+(mouseX-400)/10-3*sin(PI/30*frameCount), 680+(mouseY-400)/20-2*sin(PI/30*frameCount));
  curveVertex(360+(mouseX-400)/10-3*sin(PI/30*frameCount), 680+(mouseY-400)/20-2*sin(PI/30*frameCount));
  curveVertex(320+(mouseX-400)/10-3*sin(PI/30*frameCount), 600+(mouseY-400)/20-2*sin(PI/30*frameCount));
  curveVertex(350+(mouseX-400)/10-3*sin(PI/30*frameCount), 500+(mouseY-400)/20-2*sin(PI/30*frameCount));
  curveVertex(350+(mouseX-400)/10-3*sin(PI/30*frameCount), 500+(mouseY-400)/20-2*sin(PI/30*frameCount));
  endShape();

  //third eye; will open more the closer the cursor is to the bottom
  //eyeball
  noStroke();
  fill(50, 50, 100, 100); //bright yellow
  ellipse(400+(mouseX-400)/9, 580+(mouseY-400)/18-2*sin(PI/30*frameCount), 120, 80);
  //bright version
  fill(50, 10, 100, (-600+mouseY)/2); //even brighter yellow
  ellipse(400+(mouseX-400)/9, 580+(mouseY-400)/18-2*sin(PI/30*frameCount), 120, 80);
  //iris; will look towards cursor
  strokeWeight(2);
  stroke(180, 100, 100, 100); //blue
  fill(180, 50, 100, 100); //bright blue
  ellipse(400+(mouseX-400)/6, 580+(mouseY-400)/12-2*sin(PI/30*frameCount), 40, 40);
  //bright version; flashes rainbow colours
  strokeWeight(3);
  stroke(0, 0, 100, -600+mouseY); //white
  fill((frameCount*4)%360, 50, 100, -600+mouseY);
  ellipse(400+(mouseX-400)/6, 580+(mouseY-400)/12-2*sin(PI/30*frameCount), 40, 40);
  noStroke();
  fill(0, 0, 100, -600+mouseY); //white
  ellipse(400+(mouseX-400)/6.5, 580+(mouseY-400)/13-2*sin(PI/30*frameCount), 20, 20); //the bright version has a pupil
  //top eyelid; opens and closes relative to cursor
  strokeWeight(1);
  stroke(0, 0, 100, 100); //white
  fill(0, 0, 100, 100); //also white
  beginShape();
  curveVertex(340+(mouseX-400)/9, 580+(mouseY-400)/18-2*sin(PI/30*frameCount));
  curveVertex(340+(mouseX-400)/9, 580+(mouseY-400)/18-2*sin(PI/30*frameCount));
  curveVertex(400+(mouseX-400)/8, 600-mouseY/16*(1-cos(mouseY/509.296))+(mouseY-400)/18-2*sin(PI/30*frameCount));
  curveVertex(460+(mouseX-400)/9, 580+(mouseY-400)/18-2*sin(PI/30*frameCount));
  curveVertex(460+(mouseX-400)/9, 580+(mouseY-400)/18-2*sin(PI/30*frameCount));
  curveVertex(460+(mouseX-400)/9, 560+(mouseY-400)/18-2*sin(PI/30*frameCount));
  curveVertex(400+(mouseX-400)/8, 520+(mouseY-400)/18-2*sin(PI/30*frameCount));
  curveVertex(340+(mouseX-400)/9, 560+(mouseY-400)/18-2*sin(PI/30*frameCount));
  curveVertex(340+(mouseX-400)/9, 560+(mouseY-400)/18-2*sin(PI/30*frameCount));
  endShape();
  //bottom eyelid; ditto
  beginShape();
  curveVertex(340+(mouseX-400)/9, 580+(mouseY-400)/18-2*sin(PI/30*frameCount));
  curveVertex(340+(mouseX-400)/9, 580+(mouseY-400)/18-2*sin(PI/30*frameCount));
  curveVertex(400+(mouseX-400)/8, 600+mouseY/80*(1-cos(mouseY/509.296))+(mouseY-400)/18-2*sin(PI/30*frameCount));
  curveVertex(460+(mouseX-400)/9, 580+(mouseY-400)/18-2*sin(PI/30*frameCount));
  curveVertex(460+(mouseX-400)/9, 580+(mouseY-400)/18-2*sin(PI/30*frameCount));
  curveVertex(460+(mouseX-400)/9, 600+(mouseY-400)/18-2*sin(PI/30*frameCount));
  curveVertex(400+(mouseX-400)/8, 640+(mouseY-400)/18-2*sin(PI/30*frameCount));
  curveVertex(340+(mouseX-400)/9, 600+(mouseY-400)/18-2*sin(PI/30*frameCount));
  curveVertex(340+(mouseX-400)/9, 600+(mouseY-400)/18-2*sin(PI/30*frameCount));
  endShape();
  //eyelashes; line the inner edges of the eyelids
  strokeWeight(4);
  stroke(205, 25, 100, 100); //light blue
  noFill();
  beginShape(); //top
  curveVertex(340+(mouseX-400)/9-2*sin(PI/30*frameCount), 580+(mouseY-400)/18-2*sin(PI/30*frameCount));
  curveVertex(340+(mouseX-400)/9-2*sin(PI/30*frameCount), 580+(mouseY-400)/18-2*sin(PI/30*frameCount));
  curveVertex(400+(mouseX-400)/8, 600-mouseY/16*(1-cos(mouseY/509.296))+(mouseY-400)/18-2*sin(PI/30*frameCount));
  curveVertex(460+(mouseX-400)/9+2*sin(PI/30*frameCount), 580+(mouseY-400)/18-2*sin(PI/30*frameCount));
  curveVertex(460+(mouseX-400)/9+2*sin(PI/30*frameCount), 580+(mouseY-400)/18-2*sin(PI/30*frameCount));
  endShape();
  beginShape(); //bottom
  curveVertex(340+(mouseX-400)/9-2*sin(PI/30*frameCount), 580+(mouseY-400)/18-2*sin(PI/30*frameCount));
  curveVertex(340+(mouseX-400)/9-2*sin(PI/30*frameCount), 580+(mouseY-400)/18-2*sin(PI/30*frameCount));
  curveVertex(400+(mouseX-400)/8, 600+mouseY/80*(1-cos(mouseY/509.296))+(mouseY-400)/18-2*sin(PI/30*frameCount));
  curveVertex(460+(mouseX-400)/9+2*sin(PI/30*frameCount), 580+(mouseY-400)/18-2*sin(PI/30*frameCount));
  curveVertex(460+(mouseX-400)/9+2*sin(PI/30*frameCount), 580+(mouseY-400)/18-2*sin(PI/30*frameCount));
  endShape();
  //bright version
  strokeWeight(5);
  stroke(205, 10, 100, (-600+mouseY)/2); //light blue
  beginShape(); //top
  curveVertex(340+(mouseX-400)/9-2*sin(PI/30*frameCount), 580+(mouseY-400)/18-2*sin(PI/30*frameCount));
  curveVertex(340+(mouseX-400)/9-2*sin(PI/30*frameCount), 580+(mouseY-400)/18-2*sin(PI/30*frameCount));
  curveVertex(400+(mouseX-400)/8, 600-mouseY/16*(1-cos(mouseY/509.296))+(mouseY-400)/18-2*sin(PI/30*frameCount));
  curveVertex(460+(mouseX-400)/9+2*sin(PI/30*frameCount), 580+(mouseY-400)/18-2*sin(PI/30*frameCount));
  curveVertex(460+(mouseX-400)/9+2*sin(PI/30*frameCount), 580+(mouseY-400)/18-2*sin(PI/30*frameCount));
  endShape();
  beginShape(); //bottom
  curveVertex(340+(mouseX-400)/9-2*sin(PI/30*frameCount), 580+(mouseY-400)/18-2*sin(PI/30*frameCount));
  curveVertex(340+(mouseX-400)/9-2*sin(PI/30*frameCount), 580+(mouseY-400)/18-2*sin(PI/30*frameCount));
  curveVertex(400+(mouseX-400)/8, 600+mouseY/80*(1-cos(mouseY/509.296))+(mouseY-400)/18-2*sin(PI/30*frameCount));
  curveVertex(460+(mouseX-400)/9+2*sin(PI/30*frameCount), 580+(mouseY-400)/18-2*sin(PI/30*frameCount));
  curveVertex(460+(mouseX-400)/9+2*sin(PI/30*frameCount), 580+(mouseY-400)/18-2*sin(PI/30*frameCount));
  endShape();

  //head; a simple ellipse
  strokeWeight(4);
  fill(0, 0, 100, 100); //white
  stroke(205, 25, 100, 100); //light blue
  ellipse(400+(mouseX-400)/9, 360+(mouseY-400)/18-3*sin(PI/30*frameCount), 360, 240);
  //bright version
  strokeWeight(5);
  stroke(205, 10, 100, (-600+mouseY)/2); //light blue
  noFill();
  ellipse(400+(mouseX-400)/9, 360+(mouseY-400)/18-3*sin(PI/30*frameCount), 360, 240);

  //mouth; ellipse that changes size relative to cursor
  strokeWeight(3);
  fill(0, 50, 75, 100); //dark pink
  stroke(205, 25, 100, 100); //light blue
  ellipse(400+(mouseX-400)/5.75, 430+(mouseY-400)/12-3*sin(PI/30*frameCount), mouseY/20-abs(mouseX-400)/180, 2+mouseY/16.666);
  //bright version
  strokeWeight(4);
  fill(0, 25, 100, (-600+mouseY)/2); //pink
  stroke(205, 10, 100, (-600+mouseY)/2); //light blue
  ellipse(400+(mouseX-400)/5.75, 430+(mouseY-400)/12-3*sin(PI/30*frameCount), mouseY/20-abs(mouseX-400)/180, 2+mouseY/16.666);

  //eyes; will close more the closer the cursor is to the bottom; has base colour, pupil and shiny effects
  noStroke();
  //right
  fill(0, 0, 0, 100); //black as the void
  ellipse(480+(mouseX-400)/6, 370+(mouseY-400)/12-3*sin(PI/30*frameCount), 60, 70);
  fill(180, 100, 50, 100); //blue pupil will look at cursor
  ellipse(480+(mouseX-400)/5, 370+(mouseY-400)/10-3*sin(PI/30*frameCount), 30-(mouseX-400)/180, 30-abs(mouseY-400)/120-(mouseX-400)/200);
  fill(180, 100, 100, 25); //shiny effect
  ellipse(480+(mouseX-400)/5.75, 390+(mouseY-400)/12-3*sin(PI/30*frameCount), 40-(mouseX-400)/200, 30-(mouseY-400)/120-(mouseX-400)/200);
  fill(0, 0, 100, 80); //shinier effect
  ellipse(480+(mouseX-400)/5.75, 350+(mouseY-400)/12-3*sin(PI/30*frameCount), 30-(mouseX-400)/180, 25+(mouseY-400)/120-(mouseX-400)/200);
  //left
  fill(0, 0, 0, 100);
  ellipse(320+(mouseX-400)/6, 370+(mouseY-400)/12-3*sin(PI/30*frameCount), 60, 70);
  fill(180, 100, 50, 100);
  ellipse(320+(mouseX-400)/5, 370+(mouseY-400)/10-3*sin(PI/30*frameCount), 30+(mouseX-400)/180, 30-abs(mouseY-400)/120+(mouseX-400)/200);
  fill(180, 100, 100, 25);
  ellipse(320+(mouseX-400)/5.75, 390+(mouseY-400)/12-3*sin(PI/30*frameCount), 40+(mouseX-400)/200, 30-(mouseY-400)/120+(mouseX-400)/200);
  fill(0, 0, 100, 80);
  ellipse(320+(mouseX-400)/5.75, 350+(mouseY-400)/12-3*sin(PI/30*frameCount), 30+(mouseX-400)/180, 25+(mouseY-400)/120+(mouseX-400)/200);
  //bright version
  fill(0, 0, 100, (-600+mouseY)/2); //white
  ellipse(480+(mouseX-400)/6, 370+(mouseY-400)/12-3*sin(PI/30*frameCount), 60, 70);
  ellipse(320+(mouseX-400)/6, 370+(mouseY-400)/12-3*sin(PI/30*frameCount), 60, 70);

  //eyelids; opens and closes relative to cursor; align with eyeballs
  noStroke();
  fill(0, 0, 100, 100); //white
  //right
  beginShape(); //top
  curveVertex(510+(mouseX-400)/6, 370+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(510+(mouseX-400)/6, 370+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(508+(mouseX-400)/6, 360+(mouseY/72.727)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(505+(mouseX-400)/6, 352+(mouseY/40)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(500+(mouseX-400)/6, 344+(mouseY/27.586)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(490+(mouseX-400)/6, 337+(mouseY/21.622)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(480+(mouseX-400)/6, 335+(mouseY/20)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(470+(mouseX-400)/6, 337+(mouseY/21.622)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(460+(mouseX-400)/6, 344+(mouseY/27.586)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(455+(mouseX-400)/6, 352+(mouseY/40)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(452+(mouseX-400)/6, 360+(mouseY/72.727)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(450+(mouseX-400)/6, 370+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(450+(mouseX-400)/6, 370+(mouseY-400)/12-3*sin(PI/30*frameCount));
  vertex(450+(mouseX-400)/6, 320+(mouseY-400)/12-3*sin(PI/30*frameCount));
  vertex(510+(mouseX-400)/6, 320+(mouseY-400)/12-3*sin(PI/30*frameCount));
  vertex(510+(mouseX-400)/6, 370+(mouseY-400)/12-3*sin(PI/30*frameCount));
  endShape();
  beginShape(); //bottom
  curveVertex(510+(mouseX-400)/6, 370+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(510+(mouseX-400)/6, 370+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(508+(mouseX-400)/6, 380-(mouseY/88.888)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(505+(mouseX-400)/6, 388-(mouseY/50)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(500+(mouseX-400)/6, 396-(mouseY/34.783)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(490+(mouseX-400)/6, 403-(mouseY/27.586)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(480+(mouseX-400)/6, 405-(mouseY/26.666)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(470+(mouseX-400)/6, 403-(mouseY/27.586)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(460+(mouseX-400)/6, 396-(mouseY/34.783)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(455+(mouseX-400)/6, 388-(mouseY/50)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(452+(mouseX-400)/6, 380-(mouseY/88.888)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(450+(mouseX-400)/6, 370+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(450+(mouseX-400)/6, 370+(mouseY-400)/12-3*sin(PI/30*frameCount));
  vertex(450+(mouseX-400)/6, 420+(mouseY-400)/12-3*sin(PI/30*frameCount));
  vertex(510+(mouseX-400)/6, 420+(mouseY-400)/12-3*sin(PI/30*frameCount));
  vertex(510+(mouseX-400)/6, 370+(mouseY-400)/12-3*sin(PI/30*frameCount));
  endShape();
  //left
  beginShape(); //top
  curveVertex(350+(mouseX-400)/6, 370+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(350+(mouseX-400)/6, 370+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(348+(mouseX-400)/6, 360+(mouseY/72.727)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(345+(mouseX-400)/6, 352+(mouseY/40)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(340+(mouseX-400)/6, 344+(mouseY/27.586)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(330+(mouseX-400)/6, 337+(mouseY/21.622)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(320+(mouseX-400)/6, 335+(mouseY/20)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(310+(mouseX-400)/6, 337+(mouseY/21.622)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(300+(mouseX-400)/6, 344+(mouseY/27.586)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(295+(mouseX-400)/6, 352+(mouseY/40)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(292+(mouseX-400)/6, 360+(mouseY/72.727)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(290+(mouseX-400)/6, 370+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(290+(mouseX-400)/6, 370+(mouseY-400)/12-3*sin(PI/30*frameCount));
  vertex(290+(mouseX-400)/6, 320+(mouseY-400)/12-3*sin(PI/30*frameCount));
  vertex(350+(mouseX-400)/6, 320+(mouseY-400)/12-3*sin(PI/30*frameCount));
  vertex(350+(mouseX-400)/6, 370+(mouseY-400)/12-3*sin(PI/30*frameCount));
  endShape();
  beginShape(); //bottom
  curveVertex(350+(mouseX-400)/6, 370+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(350+(mouseX-400)/6, 370+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(348+(mouseX-400)/6, 380-(mouseY/88.888)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(345+(mouseX-400)/6, 388-(mouseY/50)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(340+(mouseX-400)/6, 396-(mouseY/34.783)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(330+(mouseX-400)/6, 403-(mouseY/27.586)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(320+(mouseX-400)/6, 405-(mouseY/26.666)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(310+(mouseX-400)/6, 403-(mouseY/27.586)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(300+(mouseX-400)/6, 396-(mouseY/34.783)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(295+(mouseX-400)/6, 388-(mouseY/50)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(292+(mouseX-400)/6, 380-(mouseY/88.888)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(290+(mouseX-400)/6, 370+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(290+(mouseX-400)/6, 370+(mouseY-400)/12-3*sin(PI/30*frameCount));
  vertex(290+(mouseX-400)/6, 420+(mouseY-400)/12-3*sin(PI/30*frameCount));
  vertex(350+(mouseX-400)/6, 420+(mouseY-400)/12-3*sin(PI/30*frameCount));
  vertex(350+(mouseX-400)/6, 370+(mouseY-400)/12-3*sin(PI/30*frameCount));
  endShape();
  //teardrops; align with bottom eyelids
  fill(180, 100, 75, 100); //blue
  triangle(490+(mouseX-400)/6, 403-(mouseY/27.586)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount), 470+(mouseX-400)/6, 403-(mouseY/27.586)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount), 480+(mouseX-400)/6, 425-(mouseY/26.666)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  triangle(330+(mouseX-400)/6, 403-(mouseY/27.586)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount), 310+(mouseX-400)/6, 403-(mouseY/27.586)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount), 320+(mouseX-400)/6, 425-(mouseY/26.666)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  //bright version of teardrops
  strokeWeight(1);
  fill(180, 25, 100, (-600+mouseY)/2); //bright blue
  stroke(180, 25, 100, (-600+mouseY)/2); //ditto
  triangle(490+(mouseX-400)/6, 403-(mouseY/27.586)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount), 470+(mouseX-400)/6, 403-(mouseY/27.586)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount), 480+(mouseX-400)/6, 425-(mouseY/26.666)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  triangle(330+(mouseX-400)/6, 403-(mouseY/27.586)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount), 310+(mouseX-400)/6, 403-(mouseY/27.586)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount), 320+(mouseX-400)/6, 425-(mouseY/26.666)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));


  //eyelashes; align with eyelids
  strokeWeight(3);
  noFill();
  stroke(205, 25, 100, 100); //light blue
  //right
  beginShape(); //top
  curveVertex(510+(mouseX-400)/6, 370+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(510+(mouseX-400)/6, 370+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(508+(mouseX-400)/6, 360+(mouseY/72.727)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(505+(mouseX-400)/6, 352+(mouseY/40)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(500+(mouseX-400)/6, 344+(mouseY/27.586)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(490+(mouseX-400)/6, 337+(mouseY/21.622)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(480+(mouseX-400)/6, 335+(mouseY/20)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(470+(mouseX-400)/6, 337+(mouseY/21.622)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(460+(mouseX-400)/6, 344+(mouseY/27.586)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(455+(mouseX-400)/6, 352+(mouseY/40)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(452+(mouseX-400)/6, 360+(mouseY/72.727)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(450+(mouseX-400)/6, 370+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(450+(mouseX-400)/6, 370+(mouseY-400)/12-3*sin(PI/30*frameCount));
  endShape();
  beginShape(); //bottom
  curveVertex(510+(mouseX-400)/6, 370+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(510+(mouseX-400)/6, 370+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(508+(mouseX-400)/6, 380-(mouseY/88.888)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(505+(mouseX-400)/6, 388-(mouseY/50)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(500+(mouseX-400)/6, 396-(mouseY/34.783)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(490+(mouseX-400)/6, 403-(mouseY/27.586)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(480+(mouseX-400)/6, 405-(mouseY/26.666)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(470+(mouseX-400)/6, 403-(mouseY/27.586)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(460+(mouseX-400)/6, 396-(mouseY/34.783)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(455+(mouseX-400)/6, 388-(mouseY/50)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(452+(mouseX-400)/6, 380-(mouseY/88.888)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(450+(mouseX-400)/6, 370+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(450+(mouseX-400)/6, 370+(mouseY-400)/12-3*sin(PI/30*frameCount));
  endShape();
  //left
  beginShape(); //top
  curveVertex(350+(mouseX-400)/6, 370+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(350+(mouseX-400)/6, 370+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(348+(mouseX-400)/6, 360+(mouseY/72.727)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(345+(mouseX-400)/6, 352+(mouseY/40)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(340+(mouseX-400)/6, 344+(mouseY/27.586)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(330+(mouseX-400)/6, 337+(mouseY/21.622)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(320+(mouseX-400)/6, 335+(mouseY/20)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(310+(mouseX-400)/6, 337+(mouseY/21.622)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(300+(mouseX-400)/6, 344+(mouseY/27.586)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(295+(mouseX-400)/6, 352+(mouseY/40)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(292+(mouseX-400)/6, 360+(mouseY/72.727)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(290+(mouseX-400)/6, 370+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(290+(mouseX-400)/6, 370+(mouseY-400)/12-3*sin(PI/30*frameCount));
  endShape();
  beginShape(); //bottom
  curveVertex(350+(mouseX-400)/6, 370+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(350+(mouseX-400)/6, 370+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(348+(mouseX-400)/6, 380-(mouseY/88.888)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(345+(mouseX-400)/6, 388-(mouseY/50)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(340+(mouseX-400)/6, 396-(mouseY/34.783)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(330+(mouseX-400)/6, 403-(mouseY/27.586)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(320+(mouseX-400)/6, 405-(mouseY/26.666)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(310+(mouseX-400)/6, 403-(mouseY/27.586)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(300+(mouseX-400)/6, 396-(mouseY/34.783)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(295+(mouseX-400)/6, 388-(mouseY/50)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(292+(mouseX-400)/6, 380-(mouseY/88.888)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(290+(mouseX-400)/6, 370+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(290+(mouseX-400)/6, 370+(mouseY-400)/12-3*sin(PI/30*frameCount));
  endShape();
  //bright version
  strokeWeight(4);
  stroke(205, 10, 100, (-600+mouseY)/2);
  //right
  beginShape(); //top
  curveVertex(510+(mouseX-400)/6, 370+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(510+(mouseX-400)/6, 370+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(508+(mouseX-400)/6, 360+(mouseY/72.727)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(505+(mouseX-400)/6, 352+(mouseY/40)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(500+(mouseX-400)/6, 344+(mouseY/27.586)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(490+(mouseX-400)/6, 337+(mouseY/21.622)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(480+(mouseX-400)/6, 335+(mouseY/20)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(470+(mouseX-400)/6, 337+(mouseY/21.622)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(460+(mouseX-400)/6, 344+(mouseY/27.586)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(455+(mouseX-400)/6, 352+(mouseY/40)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(452+(mouseX-400)/6, 360+(mouseY/72.727)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(450+(mouseX-400)/6, 370+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(450+(mouseX-400)/6, 370+(mouseY-400)/12-3*sin(PI/30*frameCount));
  endShape();
  beginShape(); //bottom
  curveVertex(510+(mouseX-400)/6, 370+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(510+(mouseX-400)/6, 370+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(508+(mouseX-400)/6, 380-(mouseY/88.888)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(505+(mouseX-400)/6, 388-(mouseY/50)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(500+(mouseX-400)/6, 396-(mouseY/34.783)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(490+(mouseX-400)/6, 403-(mouseY/27.586)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(480+(mouseX-400)/6, 405-(mouseY/26.666)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(470+(mouseX-400)/6, 403-(mouseY/27.586)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(460+(mouseX-400)/6, 396-(mouseY/34.783)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(455+(mouseX-400)/6, 388-(mouseY/50)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(452+(mouseX-400)/6, 380-(mouseY/88.888)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(450+(mouseX-400)/6, 370+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(450+(mouseX-400)/6, 370+(mouseY-400)/12-3*sin(PI/30*frameCount));
  endShape();
  //left
  beginShape(); //top
  curveVertex(350+(mouseX-400)/6, 370+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(350+(mouseX-400)/6, 370+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(348+(mouseX-400)/6, 360+(mouseY/72.727)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(345+(mouseX-400)/6, 352+(mouseY/40)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(340+(mouseX-400)/6, 344+(mouseY/27.586)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(330+(mouseX-400)/6, 337+(mouseY/21.622)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(320+(mouseX-400)/6, 335+(mouseY/20)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(310+(mouseX-400)/6, 337+(mouseY/21.622)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(300+(mouseX-400)/6, 344+(mouseY/27.586)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(295+(mouseX-400)/6, 352+(mouseY/40)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(292+(mouseX-400)/6, 360+(mouseY/72.727)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(290+(mouseX-400)/6, 370+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(290+(mouseX-400)/6, 370+(mouseY-400)/12-3*sin(PI/30*frameCount));
  endShape();
  beginShape(); //bottom
  curveVertex(350+(mouseX-400)/6, 370+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(350+(mouseX-400)/6, 370+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(348+(mouseX-400)/6, 380-(mouseY/88.888)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(345+(mouseX-400)/6, 388-(mouseY/50)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(340+(mouseX-400)/6, 396-(mouseY/34.783)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(330+(mouseX-400)/6, 403-(mouseY/27.586)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(320+(mouseX-400)/6, 405-(mouseY/26.666)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(310+(mouseX-400)/6, 403-(mouseY/27.586)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(300+(mouseX-400)/6, 396-(mouseY/34.783)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(295+(mouseX-400)/6, 388-(mouseY/50)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(292+(mouseX-400)/6, 380-(mouseY/88.888)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(290+(mouseX-400)/6, 370+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(290+(mouseX-400)/6, 370+(mouseY-400)/12-3*sin(PI/30*frameCount));
  endShape();

  //hat-looking thing; one big leaf-like shape; different control points move on different scales to give depth
  strokeWeight(4);
  stroke(50, 100, 100, 100); //yellow
  fill(50, 50, 100, 100); //bright yellow
  beginShape();
  curveVertex(400+(mouseX-400)/8, 40+(mouseY-400)/30-3*sin(PI/30*frameCount));
  curveVertex(400+(mouseX-400)/8, 40+(mouseY-400)/30-3*sin(PI/30*frameCount));
  curveVertex(480+(mouseX-400)/8, 120+(mouseY-400)/30-3*sin(PI/30*frameCount));
  curveVertex(520+(mouseX-400)/8, 200+(mouseY-400)/30-3*sin(PI/30*frameCount));
  curveVertex(520+(mouseX-400)/8, 200+(mouseY-400)/30-3*sin(PI/30*frameCount));
  vertex(520+(mouseX-400)/8, 200+(mouseY-400)/30-3*sin(PI/30*frameCount));
  curveVertex(520+(mouseX-400)/8, 200+(mouseY-400)/30-3*sin(PI/30*frameCount));
  curveVertex(620+(mouseX-400)/10, 240+(mouseY-400)/18-3*sin(PI/30*frameCount));
  curveVertex(720+(mouseX-400)/12, 320+(mouseY-400)/18-3*sin(PI/30*frameCount));
  curveVertex(720+(mouseX-400)/12, 320+(mouseY-400)/18-3*sin(PI/30*frameCount));
  vertex(720+(mouseX-400)/12, 320+(mouseY-400)/18-3*sin(PI/30*frameCount));
  curveVertex(720+(mouseX-400)/12, 320+(mouseY-400)/18-3*sin(PI/30*frameCount));
  curveVertex(660+(mouseX-400)/10, 380+(mouseY-400)/18-3*sin(PI/30*frameCount));
  curveVertex(560+(mouseX-400)/10, 420+(mouseY-400)/18-3*sin(PI/30*frameCount));
  curveVertex(560+(mouseX-400)/10, 420+(mouseY-400)/18-3*sin(PI/30*frameCount));
  vertex(540+(mouseX-400)/8, 340+(mouseY-400)/12-3*sin(PI/30*frameCount));
  vertex(470+(mouseX-400)/6, 320+(mouseY-400)/10-3*sin(PI/30*frameCount));
  curveVertex(470+(mouseX-400)/6, 320+(mouseY-400)/10-3*sin(PI/30*frameCount));
  curveVertex(470+(mouseX-400)/6, 320+(mouseY-400)/10-3*sin(PI/30*frameCount));
  curveVertex(440+(mouseX-400)/6, 340+(mouseY-400)/10-3*sin(PI/30*frameCount));
  curveVertex(400+(mouseX-400)/6, 350+(mouseY-400)/10-3*sin(PI/30*frameCount));
  curveVertex(360+(mouseX-400)/6, 340+(mouseY-400)/10-3*sin(PI/30*frameCount));
  curveVertex(330+(mouseX-400)/6, 320+(mouseY-400)/10-3*sin(PI/30*frameCount));
  curveVertex(330+(mouseX-400)/6, 320+(mouseY-400)/10-3*sin(PI/30*frameCount));
  vertex(260+(mouseX-400)/8, 340+(mouseY-400)/12-3*sin(PI/30*frameCount));
  vertex(240+(mouseX-400)/8, 420+(mouseY-400)/18-3*sin(PI/30*frameCount));
  curveVertex(240+(mouseX-400)/10, 420+(mouseY-400)/18-3*sin(PI/30*frameCount));
  curveVertex(140+(mouseX-400)/10, 380+(mouseY-400)/18-3*sin(PI/30*frameCount));
  curveVertex(80+(mouseX-400)/12, 320+(mouseY-400)/18-3*sin(PI/30*frameCount));
  curveVertex(80+(mouseX-400)/12, 320+(mouseY-400)/18-3*sin(PI/30*frameCount));
  vertex(80+(mouseX-400)/12, 320+(mouseY-400)/18-3*sin(PI/30*frameCount));
  curveVertex(80+(mouseX-400)/12, 320+(mouseY-400)/18-3*sin(PI/30*frameCount));
  curveVertex(180+(mouseX-400)/10, 240+(mouseY-400)/18-3*sin(PI/30*frameCount));
  curveVertex(280+(mouseX-400)/8, 200+(mouseY-400)/30-3*sin(PI/30*frameCount));
  curveVertex(280+(mouseX-400)/8, 200+(mouseY-400)/30-3*sin(PI/30*frameCount));
  vertex(280+(mouseX-400)/8, 200+(mouseY-400)/30-3*sin(PI/30*frameCount));
  curveVertex(280+(mouseX-400)/8, 200+(mouseY-400)/30-3*sin(PI/30*frameCount));
  curveVertex(280+(mouseX-400)/8, 200+(mouseY-400)/30-3*sin(PI/30*frameCount));
  curveVertex(320+(mouseX-400)/8, 120+(mouseY-400)/30-3*sin(PI/30*frameCount));
  curveVertex(400+(mouseX-400)/8, 40+(mouseY-400)/30-3*sin(PI/30*frameCount));
  curveVertex(400+(mouseX-400)/8, 40+(mouseY-400)/30-3*sin(PI/30*frameCount));
  endShape();
  //bright version
  strokeWeight(5);
  stroke(0, 0, 100, (-600+mouseY)/2); //white
  fill(50, 25, 100, (-600+mouseY)/2); //bright yellow
  beginShape();
  curveVertex(400+(mouseX-400)/8, 40+(mouseY-400)/30-3*sin(PI/30*frameCount));
  curveVertex(400+(mouseX-400)/8, 40+(mouseY-400)/30-3*sin(PI/30*frameCount));
  curveVertex(480+(mouseX-400)/8, 120+(mouseY-400)/30-3*sin(PI/30*frameCount));
  curveVertex(520+(mouseX-400)/8, 200+(mouseY-400)/30-3*sin(PI/30*frameCount));
  curveVertex(520+(mouseX-400)/8, 200+(mouseY-400)/30-3*sin(PI/30*frameCount));
  vertex(520+(mouseX-400)/8, 200+(mouseY-400)/30-3*sin(PI/30*frameCount));
  curveVertex(520+(mouseX-400)/8, 200+(mouseY-400)/30-3*sin(PI/30*frameCount));
  curveVertex(620+(mouseX-400)/10, 240+(mouseY-400)/18-3*sin(PI/30*frameCount));
  curveVertex(720+(mouseX-400)/12, 320+(mouseY-400)/18-3*sin(PI/30*frameCount));
  curveVertex(720+(mouseX-400)/12, 320+(mouseY-400)/18-3*sin(PI/30*frameCount));
  vertex(720+(mouseX-400)/12, 320+(mouseY-400)/18-3*sin(PI/30*frameCount));
  curveVertex(720+(mouseX-400)/12, 320+(mouseY-400)/18-3*sin(PI/30*frameCount));
  curveVertex(660+(mouseX-400)/10, 380+(mouseY-400)/18-3*sin(PI/30*frameCount));
  curveVertex(560+(mouseX-400)/10, 420+(mouseY-400)/18-3*sin(PI/30*frameCount));
  curveVertex(560+(mouseX-400)/10, 420+(mouseY-400)/18-3*sin(PI/30*frameCount));
  vertex(540+(mouseX-400)/8, 340+(mouseY-400)/12-3*sin(PI/30*frameCount));
  vertex(470+(mouseX-400)/6, 320+(mouseY-400)/10-3*sin(PI/30*frameCount));
  curveVertex(470+(mouseX-400)/6, 320+(mouseY-400)/10-3*sin(PI/30*frameCount));
  curveVertex(470+(mouseX-400)/6, 320+(mouseY-400)/10-3*sin(PI/30*frameCount));
  curveVertex(440+(mouseX-400)/6, 340+(mouseY-400)/10-3*sin(PI/30*frameCount));
  curveVertex(400+(mouseX-400)/6, 350+(mouseY-400)/10-3*sin(PI/30*frameCount));
  curveVertex(360+(mouseX-400)/6, 340+(mouseY-400)/10-3*sin(PI/30*frameCount));
  curveVertex(330+(mouseX-400)/6, 320+(mouseY-400)/10-3*sin(PI/30*frameCount));
  curveVertex(330+(mouseX-400)/6, 320+(mouseY-400)/10-3*sin(PI/30*frameCount));
  vertex(260+(mouseX-400)/8, 340+(mouseY-400)/12-3*sin(PI/30*frameCount));
  vertex(240+(mouseX-400)/8, 420+(mouseY-400)/18-3*sin(PI/30*frameCount));
  curveVertex(240+(mouseX-400)/10, 420+(mouseY-400)/18-3*sin(PI/30*frameCount));
  curveVertex(140+(mouseX-400)/10, 380+(mouseY-400)/18-3*sin(PI/30*frameCount));
  curveVertex(80+(mouseX-400)/12, 320+(mouseY-400)/18-3*sin(PI/30*frameCount));
  curveVertex(80+(mouseX-400)/12, 320+(mouseY-400)/18-3*sin(PI/30*frameCount));
  vertex(80+(mouseX-400)/12, 320+(mouseY-400)/18-3*sin(PI/30*frameCount));
  curveVertex(80+(mouseX-400)/12, 320+(mouseY-400)/18-3*sin(PI/30*frameCount));
  curveVertex(180+(mouseX-400)/10, 240+(mouseY-400)/18-3*sin(PI/30*frameCount));
  curveVertex(280+(mouseX-400)/8, 200+(mouseY-400)/30-3*sin(PI/30*frameCount));
  curveVertex(280+(mouseX-400)/8, 200+(mouseY-400)/30-3*sin(PI/30*frameCount));
  vertex(280+(mouseX-400)/8, 200+(mouseY-400)/30-3*sin(PI/30*frameCount));
  curveVertex(280+(mouseX-400)/8, 200+(mouseY-400)/30-3*sin(PI/30*frameCount));
  curveVertex(280+(mouseX-400)/8, 200+(mouseY-400)/30-3*sin(PI/30*frameCount));
  curveVertex(320+(mouseX-400)/8, 120+(mouseY-400)/30-3*sin(PI/30*frameCount));
  curveVertex(400+(mouseX-400)/8, 40+(mouseY-400)/30-3*sin(PI/30*frameCount));
  curveVertex(400+(mouseX-400)/8, 40+(mouseY-400)/30-3*sin(PI/30*frameCount));
  endShape();

  //hat floppy parts; have trailing effect
  strokeWeight(4);
  stroke(50, 100, 100, 100); //yellow
  fill(50, 50, 100, 100); //bright yellow
  //right
  beginShape();
  curveVertex(580+(mouseX-400)/7, 350+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(580+(mouseX-400)/7, 350+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(620+(pmouseX-400)/7, 480+(pmouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(580+(pmouseX-400)/7, 520+(pmouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(530+(pmouseX-400)/6, 480+(pmouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(520+(mouseX-400)/6, 325+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(520+(mouseX-400)/6, 325+(mouseY-400)/12-3*sin(PI/30*frameCount));
  endShape();
  //left
  beginShape();
  curveVertex(220+(mouseX-400)/7, 350+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(220+(mouseX-400)/7, 350+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(180+(pmouseX-400)/7, 480+(pmouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(220+(pmouseX-400)/7, 520+(pmouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(270+(pmouseX-400)/6, 480+(pmouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(280+(mouseX-400)/6, 325+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(280+(mouseX-400)/6, 325+(mouseY-400)/12-3*sin(PI/30*frameCount));
  endShape();
  //bright version
  strokeWeight(5);
  stroke(0, 0, 100, (-600+mouseY)/2); //white
  fill(50, 25, 100, (-600+mouseY)/2); //bright yellow
  //right
  beginShape();
  curveVertex(580+(mouseX-400)/7, 350+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(580+(mouseX-400)/7, 350+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(620+(pmouseX-400)/7, 480+(pmouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(580+(pmouseX-400)/7, 520+(pmouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(530+(pmouseX-400)/6, 480+(pmouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(520+(mouseX-400)/6, 320+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(520+(mouseX-400)/6, 320+(mouseY-400)/12-3*sin(PI/30*frameCount));
  endShape();
  //left
  beginShape();
  curveVertex(220+(mouseX-400)/7, 350+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(220+(mouseX-400)/7, 350+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(180+(pmouseX-400)/7, 480+(pmouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(220+(pmouseX-400)/7, 520+(pmouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(270+(pmouseX-400)/6, 480+(pmouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(280+(mouseX-400)/6, 325+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(280+(mouseX-400)/6, 325+(mouseY-400)/12-3*sin(PI/30*frameCount));
  endShape();

  //tags; quads that distort relative to cursor for depth effect, have trailing effect
  strokeWeight(4);
  stroke(180, 100, 50, 100); //dark blue
  fill(180, 100, 75, 100); //blue
  quad(425+mouseY/160+(mouseX-400)/7, 80+(mouseY-400)/16-3*sin(PI/30*frameCount)+(mouseX-400)/200, 375-mouseY/160+(mouseX-400)/7, 80+(mouseY-400)/16-3*sin(PI/30*frameCount)-(mouseX-400)/200, 370+(pmouseX-400)/5, 220+pmouseY/12-3*sin(PI/30*frameCount)-(mouseX-400)/100, 430+(pmouseX-400)/5, 220+pmouseY/12-3*sin(PI/30*frameCount)+(mouseX-400)/100);
  quad(730+(mouseX-400)/12, 340+(mouseY-400)/15-3*sin(PI/30*frameCount)+mouseX/200, 670+(mouseX-400)/10, 340+(mouseY-400)/15-3*sin(PI/30*frameCount), 670+(pmouseX-400)/10, 520+(pmouseY-400)/15-3*sin(PI/30*frameCount), 730+(pmouseX-400)/12, 520+(pmouseY-400)/15-3*sin(PI/30*frameCount)-mouseX/200);
  quad(130+(mouseX-400)/10, 340+(mouseY-400)/15-3*sin(PI/30*frameCount), 70+(mouseX-400)/12, 340+(mouseY-400)/15-3*sin(PI/30*frameCount)+(800-mouseX)/200, 70+(pmouseX-400)/12, 520+(pmouseY-400)/15-3*sin(PI/30*frameCount)-(800-mouseX)/200, 130+(pmouseX-400)/10, 520+(pmouseY-400)/15-3*sin(PI/30*frameCount));
  //bright version
  strokeWeight(5);
  stroke(0, 0, 100, (-600+mouseY)/2); //white
  fill(180, 25, 100, (-600+mouseY)/2); //bright blue
  quad(425+mouseY/160+(mouseX-400)/7, 80+(mouseY-400)/16-3*sin(PI/30*frameCount)+(mouseX-400)/200, 375-mouseY/160+(mouseX-400)/7, 80+(mouseY-400)/16-3*sin(PI/30*frameCount)-(mouseX-400)/200, 370+(pmouseX-400)/5, 220+pmouseY/12-3*sin(PI/30*frameCount)-(mouseX-400)/100, 430+(pmouseX-400)/5, 220+pmouseY/12-3*sin(PI/30*frameCount)+(mouseX-400)/100);
  quad(730+(mouseX-400)/12, 340+(mouseY-400)/15-3*sin(PI/30*frameCount)+mouseX/200, 670+(mouseX-400)/10, 340+(mouseY-400)/15-3*sin(PI/30*frameCount), 670+(pmouseX-400)/10, 520+(pmouseY-400)/15-3*sin(PI/30*frameCount), 730+(pmouseX-400)/12, 520+(pmouseY-400)/15-3*sin(PI/30*frameCount)-mouseX/200);
  quad(130+(mouseX-400)/10, 340+(mouseY-400)/15-3*sin(PI/30*frameCount), 70+(mouseX-400)/12, 340+(mouseY-400)/15-3*sin(PI/30*frameCount)+(800-mouseX)/200, 70+(pmouseX-400)/12, 520+(pmouseY-400)/15-3*sin(PI/30*frameCount)-(800-mouseX)/200, 130+(pmouseX-400)/10, 520+(pmouseY-400)/15-3*sin(PI/30*frameCount));

  //trippy circles of waves; will only appear if mouseY > 600; spin and wave formations are controlled by sine waves
  strokeWeight(4);
  noFill();
  stroke((frameCount*6)%360, 50, 100, (-600+mouseY)/4); //flashes rainbow colours
  beginShape();
  vertex(400+(mouseX-400)/6+(400+100*sin(PI/10*frameCount))*cos(PI/120*frameCount), 580+(mouseY-400)/12-2*sin(PI/30*frameCount)+(400+100*sin(PI/10*frameCount))*sin(PI/120*frameCount));
  vertex(400+(mouseX-400)/6+(400+100*sin(PI/10*frameCount-PI))*cos(PI/120*frameCount+PI/8), 580+(mouseY-400)/12-2*sin(PI/30*frameCount)+(400+100*sin(PI/10*frameCount-PI))*sin(PI/120*frameCount+PI/8));
  vertex(400+(mouseX-400)/6+(400+100*sin(PI/10*frameCount))*cos(PI/120*frameCount+PI/4), 580+(mouseY-400)/12-2*sin(PI/30*frameCount)+(400+100*sin(PI/10*frameCount))*sin(PI/120*frameCount+PI/4));
  vertex(400+(mouseX-400)/6+(400+100*sin(PI/10*frameCount-PI))*cos(PI/120*frameCount+3*PI/8), 580+(mouseY-400)/12-2*sin(PI/30*frameCount)+(400+100*sin(PI/10*frameCount-PI))*sin(PI/120*frameCount+3*PI/8));
  vertex(400+(mouseX-400)/6+(400+100*sin(PI/10*frameCount))*cos(PI/120*frameCount+PI/2), 580+(mouseY-400)/12-2*sin(PI/30*frameCount)+(400+100*sin(PI/10*frameCount))*sin(PI/120*frameCount+PI/2));
  vertex(400+(mouseX-400)/6+(400+100*sin(PI/10*frameCount-PI))*cos(PI/120*frameCount+5*PI/8), 580+(mouseY-400)/12-2*sin(PI/30*frameCount)+(400+100*sin(PI/10*frameCount-PI))*sin(PI/120*frameCount+5*PI/8));
  vertex(400+(mouseX-400)/6+(400+100*sin(PI/10*frameCount))*cos(PI/120*frameCount+3*PI/4), 580+(mouseY-400)/12-2*sin(PI/30*frameCount)+(400+100*sin(PI/10*frameCount))*sin(PI/120*frameCount+3*PI/4));
  vertex(400+(mouseX-400)/6+(400+100*sin(PI/10*frameCount-PI))*cos(PI/120*frameCount+7*PI/8), 580+(mouseY-400)/12-2*sin(PI/30*frameCount)+(400+100*sin(PI/10*frameCount-PI))*sin(PI/120*frameCount+7*PI/8));
  vertex(400+(mouseX-400)/6+(400+100*sin(PI/10*frameCount))*cos(PI/120*frameCount+PI), 580+(mouseY-400)/12-2*sin(PI/30*frameCount)+(400+100*sin(PI/10*frameCount))*sin(PI/120*frameCount+PI));
  vertex(400+(mouseX-400)/6+(400+100*sin(PI/10*frameCount-PI))*cos(PI/120*frameCount+9*PI/8), 580+(mouseY-400)/12-2*sin(PI/30*frameCount)+(400+100*sin(PI/10*frameCount-PI))*sin(PI/120*frameCount+9*PI/8));
  vertex(400+(mouseX-400)/6+(400+100*sin(PI/10*frameCount))*cos(PI/120*frameCount+5*PI/4), 580+(mouseY-400)/12-2*sin(PI/30*frameCount)+(400+100*sin(PI/10*frameCount))*sin(PI/120*frameCount+5*PI/4));
  vertex(400+(mouseX-400)/6+(400+100*sin(PI/10*frameCount-PI))*cos(PI/120*frameCount+11*PI/8), 580+(mouseY-400)/12-2*sin(PI/30*frameCount)+(400+100*sin(PI/10*frameCount-PI))*sin(PI/120*frameCount+11*PI/8));
  vertex(400+(mouseX-400)/6+(400+100*sin(PI/10*frameCount))*cos(PI/120*frameCount+3*PI/2), 580+(mouseY-400)/12-2*sin(PI/30*frameCount)+(400+100*sin(PI/10*frameCount))*sin(PI/120*frameCount+3*PI/2));
  vertex(400+(mouseX-400)/6+(400+100*sin(PI/10*frameCount-PI))*cos(PI/120*frameCount+13*PI/8), 580+(mouseY-400)/12-2*sin(PI/30*frameCount)+(400+100*sin(PI/10*frameCount-PI))*sin(PI/120*frameCount+13*PI/8));
  vertex(400+(mouseX-400)/6+(400+100*sin(PI/10*frameCount))*cos(PI/120*frameCount+7*PI/4), 580+(mouseY-400)/12-2*sin(PI/30*frameCount)+(400+100*sin(PI/10*frameCount))*sin(PI/120*frameCount+7*PI/4));
  vertex(400+(mouseX-400)/6+(400+100*sin(PI/10*frameCount-PI))*cos(PI/120*frameCount+15*PI/8), 580+(mouseY-400)/12-2*sin(PI/30*frameCount)+(400+100*sin(PI/10*frameCount-PI))*sin(PI/120*frameCount+15*PI/8));
  vertex(400+(mouseX-400)/6+(400+100*sin(PI/10*frameCount))*cos(PI/120*frameCount), 580+(mouseY-400)/12-2*sin(PI/30*frameCount)+(400+100*sin(PI/10*frameCount))*sin(PI/120*frameCount));
  endShape();
  stroke((frameCount*6+180)%360, 50, 100, (-600+mouseY)/4); //flashes rainbow colours
  beginShape(); //this one convulses more than the one above
  vertex(400+(mouseX-400)/6+(400+200*sin(PI/10*frameCount-PI))*cos(PI/120*frameCount), 580+(mouseY-400)/12-2*sin(PI/30*frameCount)+(400+200*sin(PI/10*frameCount-PI))*sin(PI/120*frameCount));
  vertex(400+(mouseX-400)/6+(400+200*sin(PI/10*frameCount))*cos(PI/120*frameCount+PI/8), 580+(mouseY-400)/12-2*sin(PI/30*frameCount)+(400+200*sin(PI/10*frameCount))*sin(PI/120*frameCount+PI/8));
  vertex(400+(mouseX-400)/6+(400+200*sin(PI/10*frameCount-PI))*cos(PI/120*frameCount+PI/4), 580+(mouseY-400)/12-2*sin(PI/30*frameCount)+(400+200*sin(PI/10*frameCount-PI))*sin(PI/120*frameCount+PI/4));
  vertex(400+(mouseX-400)/6+(400+200*sin(PI/10*frameCount))*cos(PI/120*frameCount+3*PI/8), 580+(mouseY-400)/12-2*sin(PI/30*frameCount)+(400+200*sin(PI/10*frameCount))*sin(PI/120*frameCount+3*PI/8));
  vertex(400+(mouseX-400)/6+(400+200*sin(PI/10*frameCount-PI))*cos(PI/120*frameCount+PI/2), 580+(mouseY-400)/12-2*sin(PI/30*frameCount)+(400+200*sin(PI/10*frameCount-PI))*sin(PI/120*frameCount+PI/2));
  vertex(400+(mouseX-400)/6+(400+200*sin(PI/10*frameCount))*cos(PI/120*frameCount+5*PI/8), 580+(mouseY-400)/12-2*sin(PI/30*frameCount)+(400+200*sin(PI/10*frameCount))*sin(PI/120*frameCount+5*PI/8));
  vertex(400+(mouseX-400)/6+(400+200*sin(PI/10*frameCount-PI))*cos(PI/120*frameCount+3*PI/4), 580+(mouseY-400)/12-2*sin(PI/30*frameCount)+(400+200*sin(PI/10*frameCount-PI))*sin(PI/120*frameCount+3*PI/4));
  vertex(400+(mouseX-400)/6+(400+200*sin(PI/10*frameCount))*cos(PI/120*frameCount+7*PI/8), 580+(mouseY-400)/12-2*sin(PI/30*frameCount)+(400+200*sin(PI/10*frameCount))*sin(PI/120*frameCount+7*PI/8));
  vertex(400+(mouseX-400)/6+(400+200*sin(PI/10*frameCount-PI))*cos(PI/120*frameCount+PI), 580+(mouseY-400)/12-2*sin(PI/30*frameCount)+(400+200*sin(PI/10*frameCount-PI))*sin(PI/120*frameCount+PI));
  vertex(400+(mouseX-400)/6+(400+200*sin(PI/10*frameCount))*cos(PI/120*frameCount+9*PI/8), 580+(mouseY-400)/12-2*sin(PI/30*frameCount)+(400+200*sin(PI/10*frameCount))*sin(PI/120*frameCount+9*PI/8));
  vertex(400+(mouseX-400)/6+(400+200*sin(PI/10*frameCount-PI))*cos(PI/120*frameCount+5*PI/4), 580+(mouseY-400)/12-2*sin(PI/30*frameCount)+(400+200*sin(PI/10*frameCount-PI))*sin(PI/120*frameCount+5*PI/4));
  vertex(400+(mouseX-400)/6+(400+200*sin(PI/10*frameCount))*cos(PI/120*frameCount+11*PI/8), 580+(mouseY-400)/12-2*sin(PI/30*frameCount)+(400+200*sin(PI/10*frameCount))*sin(PI/120*frameCount+11*PI/8));
  vertex(400+(mouseX-400)/6+(400+200*sin(PI/10*frameCount-PI))*cos(PI/120*frameCount+3*PI/2), 580+(mouseY-400)/12-2*sin(PI/30*frameCount)+(400+200*sin(PI/10*frameCount-PI))*sin(PI/120*frameCount+3*PI/2));
  vertex(400+(mouseX-400)/6+(400+200*sin(PI/10*frameCount))*cos(PI/120*frameCount+13*PI/8), 580+(mouseY-400)/12-2*sin(PI/30*frameCount)+(400+200*sin(PI/10*frameCount))*sin(PI/120*frameCount+13*PI/8));
  vertex(400+(mouseX-400)/6+(400+200*sin(PI/10*frameCount-PI))*cos(PI/120*frameCount+7*PI/4), 580+(mouseY-400)/12-2*sin(PI/30*frameCount)+(400+200*sin(PI/10*frameCount-PI))*sin(PI/120*frameCount+7*PI/4));
  vertex(400+(mouseX-400)/6+(400+200*sin(PI/10*frameCount))*cos(PI/120*frameCount+15*PI/8), 580+(mouseY-400)/12-2*sin(PI/30*frameCount)+(400+200*sin(PI/10*frameCount))*sin(PI/120*frameCount+15*PI/8));
  vertex(400+(mouseX-400)/6+(400+200*sin(PI/10*frameCount-PI))*cos(PI/120*frameCount), 580+(mouseY-400)/12-2*sin(PI/30*frameCount)+(400+200*sin(PI/10*frameCount-PI))*sin(PI/120*frameCount));
  endShape(); 

  //pretty light show; will only appear if mouseY > 600; each beam of light is a really long triangle
  noStroke();
  fill(0, 0, 100, (-600+mouseY)/4); //translucent white
  triangle(400+(mouseX-400)/6.5, 580+(mouseY-400)/13-2*sin(PI/30*frameCount*-1), 400+(mouseX-400)/6.5+1000*cos(PI/100*frameCount*-1), 580+(mouseY-400)/13-2*sin(PI/30*frameCount*-1)+1000*sin(PI/100*frameCount*-1), 400+(mouseX-400)/6.5+1000*cos(PI/100*frameCount*-1+PI/6), 580+(mouseY-400)/13-2*sin(PI/30*frameCount*-1)+1000*sin(PI/100*frameCount*-1+PI/6));
  triangle(400+(mouseX-400)/6.5, 580+(mouseY-400)/13-2*sin(PI/30*frameCount*-1), 400+(mouseX-400)/6.5+1000*cos(PI/100*frameCount*-1+2*PI/3), 580+(mouseY-400)/13-2*sin(PI/30*frameCount*-1)+1000*sin(PI/100*frameCount*-1+2*PI/3), 400+(mouseX-400)/6.5+1000*cos(PI/100*frameCount*-1+2*PI/3+PI/6), 580+(mouseY-400)/13-2*sin(PI/30*frameCount*-1)+1000*sin(PI/100*frameCount*-1+2*PI/3+PI/6));
  triangle(400+(mouseX-400)/6.5, 580+(mouseY-400)/13-2*sin(PI/30*frameCount*-1), 400+(mouseX-400)/6.5+1000*cos(PI/100*frameCount*-1+4*PI/3), 580+(mouseY-400)/13-2*sin(PI/30*frameCount*-1)+1000*sin(PI/100*frameCount*-1+4*PI/3), 400+(mouseX-400)/6.5+1000*cos(PI/100*frameCount*-1+4*PI/3+PI/6), 580+(mouseY-400)/13-2*sin(PI/30*frameCount*-1)+1000*sin(PI/100*frameCount*-1+4*PI/3+PI/6));
}

void mousePressed() {

  //eyes blink when mouse is pressed

  colorMode(HSB, 360, 100, 100, 100);

  //eyelids; completely cover eyes, eyelashes and teardrops
  fill(0, 0, 100, 100); //white
  strokeWeight(4);
  stroke(0, 0, 100, 100);
  ellipse(480+(mouseX-400)/6, 370+(mouseY-400)/12-3*sin(PI/30*frameCount), 60, 70);
  ellipse(320+(mouseX-400)/6, 370+(mouseY-400)/12-3*sin(PI/30*frameCount), 60, 70);
  triangle(490+(mouseX-400)/6, 403-(mouseY/27.586)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount), 470+(mouseX-400)/6, 403-(mouseY/27.586)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount), 480+(mouseX-400)/6, 425-(mouseY/26.666)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  triangle(330+(mouseX-400)/6, 403-(mouseY/27.586)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount), 310+(mouseX-400)/6, 403-(mouseY/27.586)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount), 320+(mouseX-400)/6, 425-(mouseY/26.666)*(1-cos(mouseY/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));

  //new teardrops; in closed position regardless of mouse position
  noStroke();
  fill(180, 100, 75, 100); //blue
  triangle(490+(mouseX-400)/6, 403-(800/27.586)*(1-cos(800/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount), 470+(mouseX-400)/6, 403-(800/27.586)*(1-cos(800/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount), 480+(mouseX-400)/6, 425-(800/26.666)*(1-cos(800/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  triangle(330+(mouseX-400)/6, 403-(800/27.586)*(1-cos(800/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount), 310+(mouseX-400)/6, 403-(800/27.586)*(1-cos(800/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount), 320+(mouseX-400)/6, 425-(800/26.666)*(1-cos(800/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  //bright version of teardrops
  strokeWeight(1);
  fill(180, 25, 100, (-600+mouseY)/2); //bright blue
  stroke(180, 25, 100, (-600+mouseY)/2); //ditto
  triangle(490+(mouseX-400)/6, 403-(800/27.586)*(1-cos(800/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount), 470+(mouseX-400)/6, 403-(800/27.586)*(1-cos(800/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount), 480+(mouseX-400)/6, 425-(800/26.666)*(1-cos(800/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  triangle(330+(mouseX-400)/6, 403-(800/27.586)*(1-cos(800/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount), 310+(mouseX-400)/6, 403-(800/27.586)*(1-cos(800/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount), 320+(mouseX-400)/6, 425-(800/26.666)*(1-cos(800/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));

  //new eyelashes; in closed position regardless of mouse position
  strokeWeight(4);
  noFill();
  stroke(205, 25, 100, 100); //light blue
  //right
  beginShape(); //top
  curveVertex(510+(mouseX-400)/6, 370+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(510+(mouseX-400)/6, 370+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(508+(mouseX-400)/6, 360+(800/72.727)*(1-cos(800/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(505+(mouseX-400)/6, 352+(800/40)*(1-cos(800/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(500+(mouseX-400)/6, 344+(800/27.586)*(1-cos(800/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(490+(mouseX-400)/6, 337+(800/21.622)*(1-cos(800/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(480+(mouseX-400)/6, 335+(800/20)*(1-cos(800/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(470+(mouseX-400)/6, 337+(800/21.622)*(1-cos(800/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(460+(mouseX-400)/6, 344+(800/27.586)*(1-cos(800/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(455+(mouseX-400)/6, 352+(800/40)*(1-cos(800/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(452+(mouseX-400)/6, 360+(800/72.727)*(1-cos(800/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(450+(mouseX-400)/6, 370+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(450+(mouseX-400)/6, 370+(mouseY-400)/12-3*sin(PI/30*frameCount));
  endShape();
  beginShape(); //bottom
  curveVertex(510+(mouseX-400)/6, 370+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(510+(mouseX-400)/6, 370+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(508+(mouseX-400)/6, 380-(800/88.888)*(1-cos(800/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(505+(mouseX-400)/6, 388-(800/50)*(1-cos(800/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(500+(mouseX-400)/6, 396-(800/34.783)*(1-cos(800/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(490+(mouseX-400)/6, 403-(800/27.586)*(1-cos(800/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(480+(mouseX-400)/6, 405-(800/26.666)*(1-cos(800/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(470+(mouseX-400)/6, 403-(800/27.586)*(1-cos(800/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(460+(mouseX-400)/6, 396-(800/34.783)*(1-cos(800/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(455+(mouseX-400)/6, 388-(800/50)*(1-cos(800/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(452+(mouseX-400)/6, 380-(800/88.888)*(1-cos(800/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(450+(mouseX-400)/6, 370+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(450+(mouseX-400)/6, 370+(mouseY-400)/12-3*sin(PI/30*frameCount));
  endShape();
  //left
  beginShape(); //top
  curveVertex(350+(mouseX-400)/6, 370+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(350+(mouseX-400)/6, 370+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(348+(mouseX-400)/6, 360+(800/72.727)*(1-cos(800/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(345+(mouseX-400)/6, 352+(800/40)*(1-cos(800/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(340+(mouseX-400)/6, 344+(800/27.586)*(1-cos(800/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(330+(mouseX-400)/6, 337+(800/21.622)*(1-cos(800/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(320+(mouseX-400)/6, 335+(800/20)*(1-cos(800/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(310+(mouseX-400)/6, 337+(800/21.622)*(1-cos(800/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(300+(mouseX-400)/6, 344+(800/27.586)*(1-cos(800/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(295+(mouseX-400)/6, 352+(800/40)*(1-cos(800/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(292+(mouseX-400)/6, 360+(800/72.727)*(1-cos(800/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(290+(mouseX-400)/6, 370+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(290+(mouseX-400)/6, 370+(mouseY-400)/12-3*sin(PI/30*frameCount));
  endShape();
  beginShape(); //bottom
  curveVertex(350+(mouseX-400)/6, 370+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(350+(mouseX-400)/6, 370+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(348+(mouseX-400)/6, 380-(800/88.888)*(1-cos(800/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(345+(mouseX-400)/6, 388-(800/50)*(1-cos(800/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(340+(mouseX-400)/6, 396-(800/34.783)*(1-cos(800/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(330+(mouseX-400)/6, 403-(800/27.586)*(1-cos(800/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(320+(mouseX-400)/6, 405-(800/26.666)*(1-cos(800/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(310+(mouseX-400)/6, 403-(800/27.586)*(1-cos(800/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(300+(mouseX-400)/6, 396-(800/34.783)*(1-cos(800/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(295+(mouseX-400)/6, 388-(800/50)*(1-cos(800/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(292+(mouseX-400)/6, 380-(800/88.888)*(1-cos(800/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(290+(mouseX-400)/6, 370+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(290+(mouseX-400)/6, 370+(mouseY-400)/12-3*sin(PI/30*frameCount));
  endShape();
  //bright version
  strokeWeight(4);
  stroke(205, 10, 100, (-600+mouseY)/2);
  //right
  beginShape(); //top
  curveVertex(510+(mouseX-400)/6, 370+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(510+(mouseX-400)/6, 370+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(508+(mouseX-400)/6, 360+(800/72.727)*(1-cos(800/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(505+(mouseX-400)/6, 352+(800/40)*(1-cos(800/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(500+(mouseX-400)/6, 344+(800/27.586)*(1-cos(800/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(490+(mouseX-400)/6, 337+(800/21.622)*(1-cos(800/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(480+(mouseX-400)/6, 335+(800/20)*(1-cos(800/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(470+(mouseX-400)/6, 337+(800/21.622)*(1-cos(800/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(460+(mouseX-400)/6, 344+(800/27.586)*(1-cos(800/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(455+(mouseX-400)/6, 352+(800/40)*(1-cos(800/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(452+(mouseX-400)/6, 360+(800/72.727)*(1-cos(800/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(450+(mouseX-400)/6, 370+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(450+(mouseX-400)/6, 370+(mouseY-400)/12-3*sin(PI/30*frameCount));
  endShape();
  beginShape(); //bottom
  curveVertex(510+(mouseX-400)/6, 370+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(510+(mouseX-400)/6, 370+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(508+(mouseX-400)/6, 380-(800/88.888)*(1-cos(800/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(505+(mouseX-400)/6, 388-(800/50)*(1-cos(800/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(500+(mouseX-400)/6, 396-(800/34.783)*(1-cos(800/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(490+(mouseX-400)/6, 403-(800/27.586)*(1-cos(800/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(480+(mouseX-400)/6, 405-(800/26.666)*(1-cos(800/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(470+(mouseX-400)/6, 403-(800/27.586)*(1-cos(800/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(460+(mouseX-400)/6, 396-(800/34.783)*(1-cos(800/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(455+(mouseX-400)/6, 388-(800/50)*(1-cos(800/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(452+(mouseX-400)/6, 380-(800/88.888)*(1-cos(800/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(450+(mouseX-400)/6, 370+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(450+(mouseX-400)/6, 370+(mouseY-400)/12-3*sin(PI/30*frameCount));
  endShape();
  //left
  beginShape(); //top
  curveVertex(350+(mouseX-400)/6, 370+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(350+(mouseX-400)/6, 370+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(348+(mouseX-400)/6, 360+(800/72.727)*(1-cos(800/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(345+(mouseX-400)/6, 352+(800/40)*(1-cos(800/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(340+(mouseX-400)/6, 344+(800/27.586)*(1-cos(800/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(330+(mouseX-400)/6, 337+(800/21.622)*(1-cos(800/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(320+(mouseX-400)/6, 335+(800/20)*(1-cos(800/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(310+(mouseX-400)/6, 337+(800/21.622)*(1-cos(800/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(300+(mouseX-400)/6, 344+(800/27.586)*(1-cos(800/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(295+(mouseX-400)/6, 352+(800/40)*(1-cos(800/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(292+(mouseX-400)/6, 360+(800/72.727)*(1-cos(800/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(290+(mouseX-400)/6, 370+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(290+(mouseX-400)/6, 370+(mouseY-400)/12-3*sin(PI/30*frameCount));
  endShape();
  beginShape(); //bottom
  curveVertex(350+(mouseX-400)/6, 370+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(350+(mouseX-400)/6, 370+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(348+(mouseX-400)/6, 380-(800/88.888)*(1-cos(800/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(345+(mouseX-400)/6, 388-(800/50)*(1-cos(800/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(340+(mouseX-400)/6, 396-(800/34.783)*(1-cos(800/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(330+(mouseX-400)/6, 403-(800/27.586)*(1-cos(800/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(320+(mouseX-400)/6, 405-(800/26.666)*(1-cos(800/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(310+(mouseX-400)/6, 403-(800/27.586)*(1-cos(800/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(300+(mouseX-400)/6, 396-(800/34.783)*(1-cos(800/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(295+(mouseX-400)/6, 388-(800/50)*(1-cos(800/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(292+(mouseX-400)/6, 380-(800/88.888)*(1-cos(800/509.296))+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(290+(mouseX-400)/6, 370+(mouseY-400)/12-3*sin(PI/30*frameCount));
  curveVertex(290+(mouseX-400)/6, 370+(mouseY-400)/12-3*sin(PI/30*frameCount));
  endShape();
}