Your browser does not support the canvas tag.

previous        Show / Hide Source        Download        next
/*
The ending scene of the game 'Final Fantasy crisis core'
 By: Edward(Yuhao) Lu
 Date Submitted: Sept 16, 2018
 
 Move mouse horizontally: The environment changed.
 Move mouse vertically: Interact with character.
 Mouse pressed: Feather and dialogue showed up.
 
 */

void setup() {
  size(400, 400);
}

void draw() {
  frameRate(60);
  //Background

  noStroke();
  fill(166, 153, 138);
  rect(0, 318, 400, 49);
  noStroke();
  fill(217, 206, 193);
  rect(0, 116, 400, 202);
  noStroke();
  fill(167, 212, 217);
  rect(0, 57, 400, 59);
  noStroke();
  fill(109, 160, 166);
  rect(0, 0, 400, 57);
  noStroke();
  fill(166, 153, 138);
  rect(0, 318, 400, 49);
  noStroke();
  fill(166, 153, 138);
  rect(0, 318, 400, 49);
  noStroke();
  fill(166, 153, 138);
  rect(0, 318, 400, 49);
  noStroke();
  fill(89, 73, 71);
  rect(0, 367, 400, 33);
  rect(308, 335, 92, 40);
  rect(342, 324, 58, 30);
  rect(381, 310, 29, 30);
  rect(0, 345, 10, 30);
  rect(0, 325, 4, 20);
  noStroke();
  fill(166, 153, 138);
  rect(40, 365, 30, 8);
  rect(16, 361, 28, 15);
  rect(21, 366, 9, 15);
  rect(0, 279, 121, 50);
  rect(0, 261, 98, 50);
  rect(0, 240, 65, 50);
  rect(3, 225, 50, 50);
  rect(9, 210, 25, 40);
  rect(230, 295, 170, 23);
  rect(275, 280, 150, 30);
  rect(300, 260, 100, 30);
  rect(335, 245, 65, 30);
  rect(360, 220, 40, 30);
  rect(380, 208, 20, 30);
  rect(392, 188, 8, 30);
  noStroke();
  fill(217, 206, 193);
  rect(80, 249, 20, 40);
  rect(180, 309, 40, 20);
  rect(139, 309, 15, 18);

  //Shadow
  noStroke();
  fill(186, 186, 186, 100);
  ellipse(280, 380, 220+mouseY/18, 25);

  //Light
  noStroke();
  fill(255, 255, 255, 40);
  ellipse(0, 0, sin(frameCount/14)*10+mouseX*1.75, sin(frameCount/14)*10+mouseX*1.75);
  fill(255, 255, 255, 80);
  ellipse(0, 0, sin(frameCount/14)*8+mouseX*1.5, sin(frameCount/14)*8+mouseX*1.5);
  fill(255, 255, 255, 120);
  ellipse(0, 0, sin(frameCount/14)*5+mouseX*1.25, sin(frameCount/14)*5+mouseX*1.25);
  fill(255, 255, 255, 180);
  ellipse(0, 0, sin(frameCount/14)*3+mouseX*.95, sin(frameCount/14)*3+mouseX*.95);
  fill(255, 255, 255, 230);
  ellipse(0, 0, sin(frameCount/14)*8+mouseX*.625, sin(frameCount/14)*3+mouseX*.625);
  fill(255);
  ellipse(0, 0, mouseX*.3125, mouseX*.3215);
  noStroke();
  fill(255, 255, 255, mouseX*.2);
  quad(0, 40, mouseX*.25, mouseX*1.3, mouseX*1.1, mouseX, 60, 0);




  //Cloud
  noStroke();
  fill(21, 54, 65);
  rect(50+mouseX*.6, sin(frameCount/10)+42, 62, 20);
  rect(20+mouseX*.5, cos(frameCount/10)+55, 145, 30);
  rect(50+mouseX*.5, sin(frameCount/10)+70, 102, 25);
  rect(220+mouseX*.3, cos(frameCount/10)+15, 70, 20);
  rect(200+mouseX*.3, sin(frameCount/10)+30, 120, 25);
  rect(192+mouseX*.2, cos(frameCount/10)+50, 150, 25);
  rect(215+mouseX*.3, sin(frameCount/10)+71, 90, 16);
  rect(230+mouseX*.4, sin(frameCount/10)+81, 50, 10);
  rect(0+mouseX*.6, sin(frameCount/10)+0, 100, 25);
  rect(0+mouseX*.5, cos(frameCount/10)+0, 200, 15);
  rect(0+mouseX*.65, cos(frameCount/10)+30, 75, 10);
  rect(300+mouseX*.2, sin(frameCount/10)+0, 100, 15);
  rect(350+mouseX*.15, cos(frameCount/10)+10, 50, 13);
  rect(0+mouseX*.7, sin(frameCount/10)+100, 120, 10);
  rect(0+mouseX*.8, cos(frameCount/10)+108, 60, 15);
  rect(310+mouseX*.2, sin(frameCount/10)+90, 90, 13);
  rect(375+mouseX*.1, cos(frameCount/10)+80, 25, 12);



  //Right shoe
  noStroke();
  fill(25, 25, 31);
  quad(45, 351, 56, 355, 57, 379, 46, 366);
  quad(57, 356, 58, 380, 78, 383, 71, 369);
  quad(79, 383, 89, 381, 83, 369, 72, 369);

  //Right pants
  noStroke();
  fill(14, 14, 66);
  triangle(84, 369, 90, 381, 198, 342);

  //Left shoe
  noStroke();
  fill(25, 25, 31);
  quad(89, 337, 84, 347, 103, 346, 97, 334);
  triangle(84, 348, 91, 370, 103, 347);
  quad(91, 372, 97, 385, 106, 386, 104, 347);
  quad(106, 360, 107, 386, 124, 388, 117, 366);

  //Letf pants
  noStroke();
  fill(14, 14, 66);
  quad(119, 371, 125, 388, 208, 395, 150, 361);
  quad(151, 360, 210, 395, 263, 350, 200, 343);
  triangle(212, 395, 256, 393, 265, 350);

  //Belt
  noStroke();
  fill(58, 58, 61);
  quad(277-mouseY*.0175, 350, 283, 389-mouseY*.0075, 298-mouseY*.01, 390-mouseY*.005, 310-mouseY*.005, 393-mouseY*.0325);
  triangle(278-mouseY*.0175, 349+mouseY*.0025, 312, 394-mouseY*.03, 300-mouseY*.03, 343-mouseY*.005);
  noStroke();
  fill(39, 12, 12);
  quad(272-mouseY*.0075, 353-mouseY*.0025, 272+mouseY*.005, 390-mouseY*.01, 283+mouseY*.005, 389-mouseY*.01, 276-mouseY*.0025, 353+mouseY*.0025);
  noStroke();
  fill(64, 23, 23);
  quad(266-mouseY*.01, 349+mouseY*.0025, 258+mouseY*.0025, 394, 275-mouseY*.005, 390-mouseY*.005, 274-mouseY*.01, 350);

  //Face
  noStroke();
  fill(207, 190, 176);
  quad(361-mouseY*.0375, 330-mouseY*.0375, 352-mouseY*.0375, 335-mouseY*.0375, 344-mouseY*.0375, 336-mouseY*.0375, 361-mouseY*.0375, 349-mouseY*.0375);
  quad(343-mouseY*.0375, 336-mouseY*.0375, 341-mouseY*.0375, 345-mouseY*.0375, 358-mouseY*.0375, 359-mouseY*.0375, 360-mouseY*.0375, 349-mouseY*.0375);

  //Hair
  noStroke();
  fill(36, 36, 44);
  triangle(359-mouseY*.0375, 319-mouseY*.0375, 343-mouseY*.0375, cos(frameCount/10)+335-mouseY*.0375, 362-mouseY*.0375, 326-mouseY*.0375);
  triangle(360-mouseY*.0375, cos(frameCount/10)+319-mouseY*.0375, 362-mouseY*.0375, 331-mouseY*.0375, 369-mouseY*.0375, 328-mouseY*.0375);
  triangle(370-mouseY*.0375, 329-mouseY*.0375, 360-mouseY*.0375, 333-mouseY*.0375, 398-mouseY*.0375, sin(frameCount/10)+342-mouseY*.0375);
  quad(362-mouseY*.0375, 334-mouseY*.0375, 366-mouseY*.0375, 339-mouseY*.0375, 396-mouseY*.0375, sin(frameCount/10)+357-mouseY*.0375, 383-mouseY*.0375, 340-mouseY*.0375);
  quad(362-mouseY*.0375, 337-mouseY*.0375, 359-mouseY*.0375, 344-mouseY*.0375, 361-mouseY*.0375, 347-mouseY*.0375, 390-mouseY*.0375, sin(frameCount/10)+355-mouseY*.0375);
  triangle(361-mouseY*.0375, 347-mouseY*.0375, 359-mouseY*.0375, 354-mouseY*.0375, 390-mouseY*.0375, sin(frameCount/10)+357-mouseY*.0375);
  triangle(388-mouseY*.0375, 358-mouseY*.0375, 366-mouseY*.0375, 355-mouseY*.0375, 391-mouseY*.0375, sin(frameCount/10)+368-mouseY*.0375);
  triangle(368-mouseY*.0375, 356-mouseY*.0375, 374-mouseY*.0375, 371-mouseY*.0375, 386-mouseY*.0375, sin(frameCount/10)+367-mouseY*.0375);
  quad(368-mouseY*.0375, 359-mouseY*.0375, 360-mouseY*.0375, 358-mouseY*.0375, 363-mouseY*.0375, 370-mouseY*.0375, 373-mouseY*.0375, sin(frameCount/10)+372-mouseY*.0375);


  //Ear
  noStroke();
  fill(207, 190, 176);
  ellipse(365-mouseY*.0375, 357-mouseY*.0375, 10, 8);
  stroke(0, 0, 0, 100);
  line(365-mouseY*.0375, 357-mouseY*.0375, 367-mouseY*.0375, 356-mouseY*.0375);


  //Upper cloth
  noStroke();
  fill(14, 14, 66);
  triangle(302-mouseY*.03, 347-mouseY*.01, 314-mouseY*.0025, 393-mouseY*.0375, 317-mouseY*.035, 340-mouseY*.02);
  quad(318-mouseY*.035, 339-mouseY*.02, 316-mouseY*.005, 394-mouseY*.045, 343-mouseY*.0475, 346-mouseY*.0375, 333-mouseY*.0475, 338-mouseY*.0275);
  quad(344-mouseY*.0475, 348-mouseY*.04, 318-mouseY*.0075, 394-mouseY*.0425, 350-mouseY*.015, 380-mouseY*.05, 360-mouseY*.03, 370-mouseY*.0625);

  //Arm
  noStroke();
  fill(207, 190, 176);
  quad(341-mouseY*.0525, 361-mouseY*.0575, 295+mouseY*.0025, 376-mouseY*.145, 335-mouseY*.0575, 383-mouseY*.08, 344-mouseY*.0475, 380-mouseY*.0625);
  triangle(295, 377-mouseY*.145, 291-mouseY*.03, 391-mouseY*.175, 336-mouseY*.0625, 384-mouseY*.08);
  quad(256+mouseY*.0125, 381-mouseY*.215, 256-mouseY*.005, 389-mouseY*.22, 290-mouseY*.03, 390-mouseY*.175, 294, 376-mouseY*.145);

  //Hand
  noStroke();
  fill(25, 25, 31);
  quad(261+mouseY*.01, 375-mouseY*.2025, 251+mouseY*.0275, 379-mouseY*.225, 250, 388-mouseY*.2125, 257-mouseY*.005, 393-mouseY*.2175) ;
  quad(231+mouseY*.0325, 376-mouseY*.2375, 224+mouseY*.035, 380-mouseY*.255, 228+mouseY*.025, 383-mouseY*.24, 254+mouseY*.0125, 382-mouseY*.2);
  quad(229+mouseY*.02, 384-mouseY*.24, 233+mouseY*.0225, 388-mouseY*.2325, 254-mouseY*.0025, 386-mouseY*.215, 256-mouseY*.005, 382-mouseY*.2075);
  triangle(241+mouseY*.035, 373-mouseY*.2275, 233+mouseY*.0325, 375-mouseY*.2325, 258+mouseY*.001, 383-mouseY*.21);


  //Shoulder armor
  noStroke();
  fill(25, 25, 31);
  quad(338-mouseY*.055, 345-mouseY*.055, 345-mouseY*.055, 370-mouseY*.055, 360-mouseY*.055, 360-mouseY*.055, 348-mouseY*.055, 348-mouseY*.055);
  triangle(346-mouseY*.055, 371-mouseY*.055, 366-mouseY*.055, 378-mouseY*.055, 361-mouseY*.055, 361-mouseY*.055);
  triangle(366-mouseY*.055, 379-mouseY*.055, 345-mouseY*.055, 372-mouseY*.055, 353-mouseY*.055, 393-mouseY*.055);
  quad(344-mouseY*.055, 373-mouseY*.055, 342-mouseY*.055, 378-mouseY*.055, 338-mouseY*.055, 381-mouseY*.055, 353-mouseY*.055, 394-mouseY*.055);

  //Camera
  noStroke();
  fill(0, 0, 0, 150-mouseX*0.625);
  rect(0, 0, 400, 400);

  //Feather
  noStroke();
  fill(255);
  quad(0+mouseX, 0+mouseY, 0+mouseX, 10+mouseY, 10+mouseX, 20+mouseY, 20+mouseX, 20+mouseY);
  quad(0+mouseX, 0+mouseY, 10+mouseX, 0+mouseY, 20+mouseX, 10+mouseY, 20+mouseX, 20+mouseY);
  stroke(0);
  line(0+mouseX, 0+mouseY, 16+mouseX, 16+mouseY);
  stroke(0);
  line(-5+mouseX, -5+mouseY, 0+mouseX, 0+mouseY);
}

void mousePressed() {
  frameRate(2);
  noStroke();
  fill(255, 255, 255, 50);
  ellipse(310, 210, 80, 80);
  ellipse(250, 200, 90, 90);
  ellipse(300, 260, 100, 100);
  ellipse(100, 260, 150, 150);
  ellipse(150, 200, 70, 70);
  ellipse(400, 240, 150, 150);
  ellipse(0, 200, 90, 90);
  fill(255, 255, 255, 90);
  ellipse(310, 210, 60, 60);
  ellipse(265, 210, 50, 50);
  ellipse(100, 260, 150, 80);
  ellipse(60, 320, 60, 60);
  fill(255, 255, 255, 100);
  ellipse(100, 260, 65, 100);
  noStroke();
  fill(255, 255, 255, 190);
  quad(320, 200, 300, 200, 260, 240, 260, 260);
  quad(320, 200, 320, 220, 280, 260, 260, 260);
  quad(80, 240, 80, 280, 140, 340, 180, 340);
  quad(80, 240, 120, 240, 180, 300, 180, 340);
  quad(200, 220, 200, 230, 220, 250, 230, 250);
  quad(200, 220, 210, 220, 230, 240, 230, 250);
  stroke(0);
  line(340, 180, 266, 254);
  line(40, 200, 170, 330);
  line(192, 212, 223, 243);
  stroke(255);
  line(320, 200, 300, 195);
  line(320, 200, 300, 190);
  line(320, 200, 303, 182);
  line(320, 200, 340, 210);
  line(320, 200, 335, 213);
  line(320, 200, 325, 213);
  line(80, 240, 70, 280);
  line(80, 240, 50, 230);
  line(80, 240, 50, 250);
  line(80, 240, 120, 230);
  line(80, 240, 100, 220);
  line(80, 240, 90, 200);
  line(80, 240, 60, 270);
  line(200, 220, 210, 210);
  line(200, 220, 203, 210);
  line(200, 220, 210, 215);
  line(200, 220, 190, 230);
  line(200, 220, 195, 230);
  line(200, 220, 185, 225);

  println("Those wings... I want them too");
}