void setup () {
size (400, 400);
frameRate(30);
}
void draw() {
background (98, 64, 49);
//using lines to create a brick pattern on the background.
strokeWeight ( 10);
stroke(42, 27, 24);
line (0, 165, 400, 165);
line (40, 310, 40, 165);
line (160, 310, 160, 0);
line ( 360, 310, 360, 165);
fill (78, 45, 38);
//floor
stroke (0);
strokeWeight (4);
rect ( 0, 310, 400, 90);
//devil fire
noStroke();
//chagning opacity of fire depening on mouse position
fill (255, 100, 10, (mouseX - 100 /0.75));
/* animating fire using sinusodal functions and frame count
( amplitude * sin ( 1/period * frameCount + function offset) + default position) */
triangle ( 5 * sin(0.03 * frameCount) + 220, 30, 15 * sin(0.03 * frameCount) + 220, 10 * sin(0.03 * frameCount) + 65, 15 * sin(0.03 * frameCount ) + 240, 10 * sin(30 + 0.03 * frameCount) + 60);
quad ( 15 * sin(0.03 * frameCount) + 220, 10 * sin(0.03 * frameCount) + 65, 15 * sin(0.03 * frameCount ) + 240, 10 * sin(30 + 0.03 * frameCount) + 60, 10 * sin (0.03 * frameCount) + 235, 10 * sin (0.03 * frameCount) + 90, 10 * sin (0.03 * frameCount) + 205, 10 * sin (0.03 * frameCount) + 100);
quad ( 220, 140, 260, 130, 10 * sin (0.03 * frameCount) + 235, 10 * sin (0.03 * frameCount) + 90, 10 * sin (0.03 * frameCount) + 205, 10 * sin (0.03 * frameCount) + 100);
triangle ( 5* sin (0.03 * frameCount) + 330, 170, 5* sin (0.03 * frameCount) + 320, 5* sin (0.03 * frameCount) + 210, 5* sin (0.03 * frameCount) + 335, 5* sin (0.03 * frameCount) + 200);
quad ( 5* sin (0.03 * frameCount) + 320, 5* sin (0.03 * frameCount) + 210, 5* sin (0.03 * frameCount) + 335, 5* sin (0.03 * frameCount) + 200, 5* sin (0.03 * frameCount) + 360, 5* sin (0.03 * frameCount) + 230, 5* sin (0.03 * frameCount) + 325, 5* sin (0.03 * frameCount) + 230 );
quad (5* sin (0.03 * frameCount) + 360, 5* sin (0.03 * frameCount) + 230, 5* sin (0.03 * frameCount) + 325, 5* sin (0.03 * frameCount) + 230, 5* sin (0.03 * frameCount) + 310, 5* sin (0.03 * frameCount)+ 260, 5* sin (0.03 * frameCount) + 350, 5* sin (0.03 * frameCount) + 280);
quad (5* sin (0.03 * frameCount) + 310, 5* sin (0.03 * frameCount)+ 260, 5* sin (0.03 * frameCount) + 350, 5* sin (0.03 * frameCount) + 280, 320, 320, 230, 320);
triangle (5* sin (0.03 * frameCount) + 270, 5* sin (0.03 * frameCount) + 90, 5* sin (0.03 * frameCount) + 260, 5* sin (0.03 * frameCount) + 130, 5* sin (0.03 * frameCount) + 280, 5* sin (0.03 * frameCount) + 120 );
quad (5* sin (0.03 * frameCount) + 260, 5* sin (0.03 * frameCount) + 130, 5* sin (0.03 * frameCount) + 280, 5* sin (0.03 * frameCount) + 120, 310, 170, 265, 165);
quad (310, 170, 265, 165, 200, 320, 320, 320);
triangle ( 5* sin (0.03 * frameCount) + 70, 170, 5* sin (0.03 * frameCount) + 80, 5* sin (0.03 * frameCount) + 210, 5* sin (0.03 * frameCount) + 65, 5* sin (0.03 * frameCount) + 200);
quad ( 5* sin (0.03 * frameCount) + 80, 5* sin (0.03 * frameCount) + 210, 5* sin (0.03 * frameCount) + 65, 5* sin (0.03 * frameCount) + 200, 5* sin (0.03 * frameCount) + 40, 5* sin (0.03 * frameCount) + 230, 5* sin (0.03 * frameCount) + 75, 5* sin (0.03 * frameCount) + 230 );
quad (5* sin (0.03 * frameCount) + 40, 5* sin (0.03 * frameCount) + 230, 5* sin (0.03 * frameCount) + 75, 5* sin (0.03 * frameCount) + 230, 5* sin (0.03 * frameCount) + 90, 5* sin (0.03 * frameCount)+ 260, 5* sin (0.03 * frameCount) + 50, 5* sin (0.03 * frameCount) + 280);
quad (5* sin (0.03 * frameCount) + 90, 5* sin (0.03 * frameCount)+ 260, 5* sin (0.03 * frameCount) + 50, 5* sin (0.03 * frameCount) + 280, 80, 320, 170, 320);
triangle (5* sin (0.03 * frameCount) + 130, 5* sin (0.03 * frameCount) + 90, 5* sin (0.03 * frameCount) + 140, 5* sin (0.03 * frameCount) + 130, 5* sin (0.03 * frameCount) + 120, 5* sin (0.03 * frameCount) + 120 );
quad (5* sin (0.03 * frameCount) + 140, 5* sin (0.03 * frameCount) + 130, 5* sin (0.03 * frameCount) + 120, 5* sin (0.03 * frameCount) + 120, 90, 170, 135, 165);
quad (90, 170, 145, 165, 200, 320, 80, 320);
//holy light
fill(255, 127, 50, 400 - (mouseX + 100 /0.75));
ellipse (200, 170, 250, 250);
fill ( 255, 242, 100, 400 - (mouseX + 100 /0.75));
triangle ( 180, 180, 220, 180, 200, 20 + 20* sin (0.03 * frameCount));
triangle ( 40 + 20* sin (0.03 * frameCount), 170, 170, 150, 170, 190);
triangle ( 160, 180, 190, 150, 100 + 20* sin (0.03 * frameCount + 15), 50 + 20* sin (0.03 * frameCount + 15));
triangle ( 240, 180, 210, 150, 300 - 20* sin (0.03 * frameCount + 15), 50 + 20* sin (0.03 * frameCount + 15));
triangle ( 360 - 20* sin (0.03 * frameCount), 170, 230, 150, 230, 190);
triangle (70 + 20* sin (0.03 * frameCount + 15), 280 - 20* sin (0.03 * frameCount + 15), 180, 170, 190, 210);
triangle ( 330 -20* sin (0.03 * frameCount + 15), 280 - 20* sin (0.03 * frameCount + 15), 220, 170, 210, 210);
strokeWeight(4);
fill(65, 65, 65, (mouseX - 100 /0.75));
//devil right wing
//using shapes to fill/colour in wings
quad (235, 245, 230, 265, 280, 230, 270, 225);
quad (280, 230, 270, 227, 295, 195, 300, 200);
triangle (295, 198, 320, 190, 305, 165) ;
quad (320, 190, 305, 190, 315, 215, 330, 215);
quad (315, 215, 330, 215, 330, 250, 319, 250);
triangle (320, 250, 330, 250, 321, 285);
quad (308, 190, 300, 190, 295, 240, 305, 240);
quad (295, 240, 305, 240, 293, 280, 285, 280);
triangle (293, 280, 285, 280, 279, 300);
quad (295, 195, 303, 195, 285, 250, 277, 250);
quad (285, 250, 277, 250, 257, 280, 265, 280);
triangle (257, 280, 265, 280, 240, 300);
noFill();
stroke(0, 0, 0, 0 + (mouseX - 100/ 0.75));
//devil right wing outline
curve (120, 225, 235, 245, 305, 165, 300, 0);
curve (205, 100, 305, 165, 314, 300, 100, 600);
curve (250, 400, 314, 300, 305, 190, 200, 100);
curve (220, 150, 305, 190, 279, 300, 200, 300);
curve (200, 400, 279, 300, 297, 210, 310, 0);
curve (320, 0, 297, 210, 240, 300, 150, 280);
curve (180, 300, 240, 300, 287, 220, 330, 0);
curve (375, 100, 287, 220, 230, 255, 100, 300);
//devil left wing
noStroke();
fill(65, 65, 65,(mouseX - 100 /0.75));
quad (165, 245, 170, 265, 120, 230, 130, 225);
quad (120, 230, 130, 227, 105, 195, 100, 200);
triangle (107, 198, 80, 190, 95, 165) ;
quad (80, 190, 95, 190, 85, 215, 70, 215 );
quad (85, 215, 70, 215, 70, 250, 81, 250);
triangle (80, 250, 70, 250, 81, 285);
quad (92, 190, 100, 190, 105, 240, 95, 240);
quad (105, 240, 95, 240, 107, 280, 115, 280);
triangle (107, 280, 115, 280, 121, 300);
quad (105, 195, 97, 195, 115, 250, 123, 250);
quad ( 115, 250, 123, 250, 143, 280, 135, 280);
triangle ( 143, 280, 135, 280, 160, 300);
noFill();
stroke(0, 0, 0, 0 + (mouseX - 100/ 0.75));
//left wing outline
curve ( 280, 225, 165, 245, 95, 165, 100, 0);
curve (195, 100, 95, 165, 86, 300, 300, 600);
curve ( 150, 400, 86, 300, 95, 190, 200, 100 );
curve ( 180, 150, 95, 190, 121, 300, 200, 300 );
curve ( 200, 400, 121, 300, 103, 210, 90, 0);
curve ( 80, 0, 103, 210, 160, 300, 250, 280 );
curve ( 220, 300, 160, 300, 113, 220, 70, 0 );
curve ( 25, 100, 113, 220, 170, 255, 300, 300 );
//angel left wing
noStroke();
quad (70, 220, 60, 250, 160, 250, 160, 220);
fill ( 255, 255, 255, 400 - (mouseX + 100/ 0.75));
quad (70, 220, 55, 250, 160, 250, 160, 220);
quad ( 55, 250, 160, 250, 160, 260, 50, 260);
quad (75, 250, 130, 250, 130, 270, 70, 270);
quad (70, 270, 95, 270, 70, 305, 55, 290);
quad (70, 305, 55, 290, 50, 290, 52, 305 );
quad ( 50, 255, 75, 260, 45, 278, 40, 260 );
quad ( 45, 278, 40, 260, 30, 260, 35, 270);
stroke(0, 0, 0, 400 - (mouseX + 100/ 0.75));
curve ( 50, 1000, 70, 220, 160, 220, 400, 190 );
noFill();
//angel left wing outline
curve ( 120, 0, 70, 220, 30, 260, 20, 240 );
curve ( 40, 200, 30, 260, 50, 275, 70, 250 );
curve (-50, 300, 50, 275, 75, 245, 70, 250);
curve (50, 200, 75, 245, 50, 290, 0, 280);
curve ( 70, 220, 50, 290, 65, 305, 100, 280 );
fill(255, 255, 255, 400 - (mouseX + 100/ 0.75));
curve (140, 200, 135, 260, 145, 260, 140, 100 );
curve ( 100, 150, 115, 275, 135, 250, 120, 100 );
curve ( 110, 50, 90, 275, 120, 250, 105, 0 );
noFill();
curve (000, 300, 65, 305, 100, 240, 100, 100 );
stroke(0);
//angel right wing
noStroke();
quad (330, 220, 340, 250, 240, 250, 240, 220);
fill ( 255, 255, 255, 400 - (mouseX + 100/ 0.75));
quad (330, 220, 345, 250, 240, 250, 240, 220);
quad ( 345, 250, 240, 250, 240, 260, 350, 260);
quad (325, 250, 270, 250, 270, 270, 330, 270);
quad (330, 270, 305, 270, 330, 305, 345, 290);
quad (330, 305, 345, 290, 350, 290, 348, 305 );
quad ( 350, 255, 325, 260, 355, 278, 360, 260 );
quad ( 355, 278, 360, 260, 370, 260, 365, 270);
stroke ( 0, 0, 0, 400 - (mouseX + 100/ 0.75));
curve ( 350, 1000, 330, 220, 240, 220, 0, 190 );
noFill();
//angel right wing outline
curve ( 280, 0, 330, 220, 370, 260, 380, 240 );
curve ( 360, 200, 370, 260, 350, 275, 330, 250 );
curve (450, 300, 350, 275, 325, 245, 330, 250);
curve (350, 200, 325, 245, 350, 290, 400, 280);
curve ( 330, 220, 350, 290, 335, 305, 300, 280 );
fill(255, 255, 255, 400 - (mouseX + 100/ 0.75));
curve (260, 200, 265, 260, 255, 260, 260, 100 );
curve ( 300, 150, 285, 275, 265, 250, 280, 100 );
curve ( 290, 50, 310, 275, 280, 250, 295, 0 );
noFill();
curve (400, 300, 335, 305, 300, 240, 300, 100 );
stroke(0);
fill(250 - (mouseX/2.16), 210 - (mouseX/2.75), 200 - (mouseX/2.96));
//right arm
curve( 180, 100, 240, 280, 240, 220, 80, 0);
//left arm
curve (220, 100, 160, 280, 160, 220, 320, 0);
//body
ellipse (200, 260, 85, 90);
//curve and triangle used to smooth between body and head
curve ( 170, 0, 235, 220, 242, 270, 240, 300);
noStroke();
triangle (240, 260, 222, 250, 235, 220);
stroke(0);
curve ( 230, 0, 165, 220, 158, 270, 160, 300);
noStroke();
triangle( 160, 260, 178, 250, 165, 220);
//left leg
rect (157, 270, 33, 60);
stroke(0);
curve (170, 100, 158, 270, 160, 330, 170, 300);
line (160, 330, 190, 330);
curve (185, 500, 191, 330, 191, 305, 185, 100 );
//right leg
noStroke();
rect (210, 270, 32, 60);
stroke(0);
curve (235, 100, 242, 270, 240, 330, 235, 300);
line (240, 330, 210, 330);
curve (215, 500, 209, 330, 209, 305, 215, 100);
//curve (0,290 , 185, 305, 215, 305, 400 ,290);
//head
stroke(0);
strokeWeight(5);
ellipse (200, 185, 130, 120);
//tears
fill(100, 255, 255, 400 - (mouseX + 100 /0.75));
noStroke();
quad (155, 190, 180, 190, 180, 215, 155, 210 );
quad ( 180, 215, 155, 210, 150, 220, 160, 230);
quad (245, 190, 220, 190, 220, 215, 245, 210 );
quad ( 220, 215, 245, 210, 250, 220, 240, 230);
//pentagram
stroke( 150, 0 ,0, (mouseX - 100 /0.75));
strokeWeight(2);
line ( 213, 150, 187, 170);
line ( 187, 150, 213, 170);
line ( 187, 170, 213, 170);
line ( 200, 180, 213, 150);
line ( 200, 180, 187, 150);
//left eye
fill(0 + (mouseX /4.2), 0, 0);
stroke (0);
strokeWeight(1);
ellipse (167, 185, 33, 33);
fill (255);
noStroke();
ellipse (162, 178, 12, 12);
ellipse (174, 192, 6, 6);
//right eye
fill(0 + (mouseX /4.2), 0, 0);
stroke(0);
ellipse (233, 185, 33, 33 );
fill (255, 255);
noStroke();
ellipse (228, 178, 12, 12);
ellipse (240, 192, 6, 6);
//mouth
noFill();
stroke(0);
strokeWeight (4);
curve (115, 250, 185, 210, 215, 210, 275, 250);
//right horn
stroke(0, 0, 0, 0 + (mouseX - 100/ 0.75));
fill(42, 42, 42, 0 + (mouseX - 100 /0.75));
arc (300, 120, 40, 40, PI, TWO_PI);
noStroke();
triangle ( 300, 120, 320, 120, 310, 140);
triangle ( 300, 120, 285, 120, 285, 140);
stroke(0, 0, 0, 0 + (mouseX - 100/ 0.75));
line ( 300, 120, 310, 140);
line (320, 120, 310, 140);
line (300, 120, 285, 140);
quad ( 255, 165, 230, 145, 255, 105, 285, 120);
quad ( 255, 105, 280, 95, 300, 145, 275, 155);
//left horn
stroke(0, 0, 0, 0 + (mouseX - 100/ 0.75));
arc (100, 120, 40, 40, PI, TWO_PI);
noStroke();
triangle ( 100, 120, 80, 120, 90, 140);
triangle ( 100, 120, 115, 120, 115, 140);
stroke(0, 0, 0, 0 + (mouseX - 100/ 0.75));
line ( 100, 120, 90, 140);
line (80, 120, 90, 140);
line (100, 120, 115, 140);
quad ( 145, 165, 170, 145, 145, 105, 115, 120);
quad ( 145, 105, 120, 95, 100, 145, 125, 155);
}
void mousePressed () {
println (" Mother is watching");
}