Your browser does not support the canvas tag.

previous        Show / Hide Source        Download        next
/*
The Artist's Ghost by Sebastian Scaini
*/

void setup() {
  size(400, 400);
  rectMode(CORNERS);
  ellipseMode(CORNERS);
}

void draw() {

  frameRate(60);

  //WALL
  noStroke();
  fill(#725225);
  rect(0, 0, 400, 400);

  //FLOOR
  noStroke();
  fill(#322416);
  rect(0, 340, 400, 400);

  //WINDOW
  //background + frame
  stroke(#422702);
  strokeWeight(5);
  fill(#0064A1);
  rect(260, 100, 340, 180);

  //cross frame
  line(300, 100, 300, 180);
  line(260, 140, 340, 140);
  strokeWeight(1);

  //BOOKSHELF
  //frame
  stroke(0);
  fill(#723C0E);
  rect(0, 120, 100, 340);

  //shelves
  stroke(0);
  fill(#66360D);
  rect(0, 117, 100, 120);
  rect(0, 147, 100, 150);
  rect(0, 177, 100, 180);
  rect(0, 207, 100, 210);
  rect(0, 237, 100, 240);
  rect(0, 267, 100, 270);
  rect(0, 297 + mouseY/20, 100, 300 + mouseY/20);
  rect(0, 337, 100, 340);

  //books 1
  stroke(0);
  fill(#223D18);
  rect(10 + mouseX/10, 127, 20 + mouseX/10, 147);
  rect(20 + mouseX/10, 130, 30 + mouseX/10, 147);
  rect(30 + mouseX/10, 130, 40 + mouseX/10, 147);
  rect(50 + mouseX/10, 127, 60 + mouseX/10, 147);

  //books 2
  rect(100 - mouseX/15, 157, 90 - mouseX/15, 177);
  rect(90 - mouseX/15, 157, 80 - mouseX/15, 177);
  rect(70 - mouseX/15, 160, 60 - mouseX/15, 177);
  rect(60 - mouseX/15, 157, 50 - mouseX/15, 177);

  //books 3
  rect(50 + mouseX/25, 187, 60 + mouseX/25, 207);
  rect(60 + mouseX/25, 190, 70 + mouseX/25, 207);

  //books 4
  rect(0, 217 + mouseY/13, 10, 237 + mouseY/13);
  rect(10, 220 + mouseY/13, 20, 237 + mouseY/13);
  rect(30, 217 + mouseY/13, 40, 237 + mouseY/13);


  //PAINTING
  //frame + background
  stroke(#66360D);
  strokeWeight(4);
  fill(255 - mouseX/2, 255 - mouseX/2, 255 - mouseX/2);
  rect(200 + mouseX/5, 20 - mouseY/15, 260 + mouseX/5, 80 - mouseY/15);
  strokeWeight(1);

  //art
  stroke(0);
  strokeWeight(2);
  noFill();
  rect(210 + mouseX/5, 35 - mouseY/15, 250 + mouseX/5, 75 - mouseY/15);
  line(220 + mouseX/5, 45 - mouseY/15, 220 + mouseX/5, 60 - mouseY/15);
  line(240 + mouseX/5, 45 - mouseY/15, 240 + mouseX/5, 60 - mouseY/15);
  strokeWeight(1);


  //CLOCK
  //face
  stroke(0);
  strokeWeight(2);
  fill(255);
  ellipse(140 - mouseX/15, 80 + mouseY/15, 240 - mouseX/15, 180 + mouseY/15);
  strokeWeight(0);

  //short hand
  stroke(0);
  strokeWeight(1.5);
  line(190 - mouseX/5, 100 + mouseY/5, 190 - mouseX/15, 130 + mouseY/15);

  //long hand
  line(190 - mouseX/-50, 100 - mouseY/-50, 190 - mouseX/15, 130 + mouseY/15);


  //EASEL
  //top
  stroke(0);
  fill(#A58B68);
  rect(85, 208, 95, 220);

  //left leg
  quad(40, 320, 50, 320, 45, 350, 35, 350);

  //right leg
  quad(130, 320, 140, 320, 145, 350, 135, 350);


  //CANVAS
  stroke(0);
  fill(255);
  rect(40, 220, 140, 320);


  //PAGE 1
  stroke(0);
  fill(255);
  rect(20 + mouseX/50, 50 + mouseY/50, 50 + mouseX/50, 90 + mouseY/50);
  line(25 + mouseX/50, 60 + mouseY/50, 45 + mouseX/50, 60 + mouseY/50);
  line(25 + mouseX/50, 70 + mouseY/50, 45 + mouseX/50, 70 + mouseY/50);
  line(25 + mouseX/50, 80 + mouseY/50, 45 + mouseX/50, 80 + mouseY/50);

  //PAGE 2
  stroke(0);
  fill(255);
  quad(80 - mouseX/10, 40 + mouseY/10, 100 - mouseX/10, 20 + mouseY/10, 130 - mouseX/10, 50 + mouseY/10, 110 - mouseX/10, 70 + mouseY/10);


  //PAINTBRUSH 1
  //paint
  stroke(0);
  fill(#FF0000);
  triangle(50 + mouseX/5, 230 + mouseY/5, 55 + mouseX/5, 225 + mouseY/5, 45 + mouseX/5, 220 + mouseY/5);

  //brush
  fill(#A58B68);
  ellipse(50 + mouseX/5, 225 + mouseY/5, 60 + mouseX/5, 235 + mouseY/5);

  //handle
  fill(#E5C291);
  quad(60 + mouseX/5, 230 + mouseY/5, 80 + mouseX/5, 260 + mouseY/5, 75 + mouseX/5, 265 + mouseY/5, 55 + mouseX/5, 235 + mouseY/5);


  //PAINTBRUSH 2
  //paint
  stroke(0);
  fill(#FF0000);
  triangle(180 + mouseX/7, 20 + mouseY/7, 175 + mouseX/7, 30 + mouseY/7, 170 + mouseX/7, 25 + mouseY/7);

  //brush
  fill(#A58B68);
  ellipse(165 + mouseX/7, 25 + mouseY/7, 175 + mouseX/7, 35 + mouseY/7); 

  //handle
  fill(#E5C291);
  quad(165 + mouseX/7, 30 + mouseY/7, 170 + mouseX/7, 35 + mouseY/7, 160 + mouseX/7, 55 + mouseY/7, 155 + mouseX/7, 50 + mouseY/7);


  //PAINTBRUSH 3
  //paint
  stroke(0);
  fill(#FF0000);
  triangle(360 - mouseX/4, 285 - mouseY/4, 370 - mouseX/4, 280 - mouseY/4, 365 - mouseX/4, 290 - mouseY/4);

  //brush
  fill(#A58B68);
  ellipse(355 - mouseX/4, 285 - mouseY/4, 365 - mouseX/4, 295 - mouseY/4);

  //handle
  fill(#E5C291);
  quad(355 - mouseX/4, 290 - mouseY/4, 360 - mouseX/4, 295 - mouseY/4, 350 - mouseX/4, 320 - mouseY/4, 345 - mouseX/4, 315 - mouseY/4);


  //ARTIST GHOST
  //body
  stroke(0);
  fill(255);
  rect(160, 220 - mouseY/6, 220, 320 - mouseY/6);

  //moustache
  stroke(0);
  strokeWeight(1.5);
  line(187.5, 267.5 - mouseY/6, 175, 270 - mouseY/6);
  line(192.5, 267.5 - mouseY/6, 205, 270 - mouseY/6);
  strokeWeight(1);

  //scarf
  stroke(0);
  fill(#FF0000);
  rect(160, 280 - mouseY/6, 220, 290 - mouseY/6);
  quad(220, 280 - mouseY/6, 235, 300 - mouseY/6, 225, 300 - mouseY/6, 220, 290 - mouseY/6);

  //stripes
  stroke(0);
  strokeWeight(2);
  line(160, 295 - mouseY/6, 220, 295 - mouseY/6);
  line(160, 305 - mouseY/6, 220, 305 - mouseY/6);
  line(160, 315 - mouseY/6, 220, 315 - mouseY/6);
  strokeWeight(1);

  //eyes
  stroke(0);
  strokeWeight(1.5);
  line(180, 240 - mouseY/6, 180, 260 - mouseY/6);
  line(200, 240 - mouseY/6, 200, 260 - mouseY/6);
  strokeWeight(1);

  //hat
  stroke(0);
  fill(0);
  ellipse(155, 210 - mouseY/6, 225, 235 - mouseY/6);
  rect(205, 205 - mouseY/6, 210, 220 - mouseY/6);
}

void keyPressed() {

  //SCREAM
  println("AAAAAAAAAAAAH!");

  //BLACKOUT
  noStroke();
  fill(0);
  rect(0, 0, 400, 400);

  //STOP
  frameRate(2);
}

void mousePressed() {
  //PREPARE TO BE SPOOKED!
  
  //SLOW
  frameRate(1);

  //WALL
  noStroke();
  fill(#725225);
  rect(0, 0, 400, 400);

  //FLOOR
  noStroke();
  fill(#322416);
  rect(0, 340, 400, 400);

  //TEXT (Walls)
  stroke(#6E0805);
  strokeWeight(4);

  //"HE'S HERE"
  //h
  line(100, 10, 100, 30);
  line(100, 20, 115, 20);
  line(115, 10, 115, 30);

  //e
  line(125, 10, 125, 30);
  line(125, 10, 135, 10);
  line(125, 20, 135, 20);
  line(125, 30, 135, 30);

  //'
  line(145, 10, 145, 15);

  //s
  line(155, 10, 165, 10);
  line(155, 10, 155, 20);
  line(155, 20, 165, 20);
  line(165, 20, 165, 30);
  line(165, 30, 155, 30);

  //h2
  line(110, 50, 110, 70);
  line(110, 60, 125, 60);
  line(125, 50, 125, 70);

  //e2
  line(135, 50, 135, 70);
  line(135, 50, 145, 50);
  line(135, 60, 145, 60);
  line(135, 70, 145, 70);

  //r
  line(155, 50, 155, 70);
  line(155, 50, 165, 50);
  line(165, 50, 165, 60);
  line(155, 60, 165, 60);
  line(155, 60, 165, 70);

  //e3
  line(175, 50, 175, 70);
  line(175, 50, 185, 50);
  line(175, 60, 185, 60);
  line(175, 70, 185, 70);
  
  
  //"HE'S COMING"
  
  //h
  line(280, 220, 280, 240);
  line(280, 230, 295, 230);
  line(295, 220, 295, 240);
  
  //e
  line(310, 220, 310, 240);
  line(310, 220, 320, 220);
  line(310, 230, 320, 230);
  line(310, 240, 320, 240);
  
  //'
  line(330, 220, 330, 225);
  
  //s
  line(340, 220, 350, 220);
  line(340, 220, 340, 230);
  line(340, 230, 350, 230);
  line(350, 230, 350, 240);
  line(350, 240, 340, 240);
  
  //c
  line(250, 280, 265, 280);
  line(250, 280, 250, 300);
  line(250, 300, 265, 300);
  
  //o
  noFill();
  ellipse(270, 280, 290, 300);
  
  //m
  line(300, 280, 300, 300);
  line(300, 280, 310, 290);
  line(310, 290, 320, 280);
  line(320, 280, 320, 300);
  
  //i
  line(330, 280, 330, 300);
  
  //n
  line(340, 280, 340, 300);
  line(340, 280, 350, 300);
  line(350, 300, 350, 280);
  
  //g
  line(360, 280, 360, 300);
  line(360, 280, 370, 280);
  line(360, 290, 370, 290);
  line(370, 290, 370, 300);
  line(360, 300, 370, 300);

  strokeWeight(1);

  //WINDOW
  //background + frame
  stroke(#422702);
  strokeWeight(5);
  fill(#6E0805);
  rect(260, 100, 340, 180);
  
  //FIGURE
  //body
  fill(0);
  noStroke();
  rect(270, 110, 330, 180);
  
  //eyes
  fill(255, 0, 0);
  noStroke();
  rect(280, 130, 290, 160);
  rect(320, 130, 310, 160);

  //cross frame
  stroke(#422702);
  strokeWeight(5);
  fill(#6E0805);
  line(300, 100, 300, 180);
  line(260, 140, 340, 140);
  strokeWeight(1);

  //BOOKSHELF
  //frame
  stroke(0);
  fill(#723C0E);
  rect(0, 120, 100, 340);

  //shelves
  stroke(0);
  fill(#66360D);
  rect(0, 117, 100, 120);
  rect(0, 147, 100, 150);
  rect(0, 177, 100, 180);
  rect(0, 207, 100, 210);
  rect(0, 237, 100, 240);
  rect(0, 267, 100, 270);
  rect(0, 297 + mouseY/20, 100, 300 + mouseY/20);
  rect(0, 337, 100, 340);

  //books 1
  stroke(0);
  fill(#223D18);
  rect(10 + mouseX/10, 127, 20 + mouseX/10, 147);
  rect(20 + mouseX/10, 130, 30 + mouseX/10, 147);
  rect(30 + mouseX/10, 130, 40 + mouseX/10, 147);
  rect(50 + mouseX/10, 127, 60 + mouseX/10, 147);

  //books 2
  rect(100 - mouseX/15, 157, 90 - mouseX/15, 177);
  rect(90 - mouseX/15, 157, 80 - mouseX/15, 177);
  rect(70 - mouseX/15, 160, 60 - mouseX/15, 177);
  rect(60 - mouseX/15, 157, 50 - mouseX/15, 177);

  //books 3
  rect(50 + mouseX/25, 187, 60 + mouseX/25, 207);
  rect(60 + mouseX/25, 190, 70 + mouseX/25, 207);

  //books 4
  rect(0, 217 + mouseY/13, 10, 237 + mouseY/13);
  rect(10, 220 + mouseY/13, 20, 237 + mouseY/13);
  rect(30, 217 + mouseY/13, 40, 237 + mouseY/13);


  //PAINTING
  //frame + background
  stroke(#66360D);
  strokeWeight(4);
  fill(255 - mouseX/2, 255 - mouseX/2, 255 - mouseX/2);
  rect(200 + mouseX/5, 20 - mouseY/15, 260 + mouseX/5, 80 - mouseY/15);
  strokeWeight(1);

  //art
  stroke(0);
  strokeWeight(2);
  noFill();
  rect(210 + mouseX/5, 35 - mouseY/15, 250 + mouseX/5, 75 - mouseY/15);
  line(220 + mouseX/5, 45 - mouseY/15, 220 + mouseX/5, 60 - mouseY/15);
  line(240 + mouseX/5, 45 - mouseY/15, 240 + mouseX/5, 60 - mouseY/15);
  strokeWeight(1);


  //CLOCK
  //face
  stroke(0);
  strokeWeight(2);
  fill(255);
  ellipse(140 - mouseX/15, 80 + mouseY/15, 240 - mouseX/15, 180 + mouseY/15);
  strokeWeight(0);

  //short hand
  stroke(0);
  strokeWeight(1.5);
  line(190 - mouseX/5, 100 + mouseY/5, 190 - mouseX/15, 130 + mouseY/15);

  //long hand
  line(190 - mouseX/-50, 100 - mouseY/-50, 190 - mouseX/15, 130 + mouseY/15);


  //EASEL
  //top
  stroke(0);
  fill(#A58B68);
  rect(85, 208, 95, 220);

  //left leg
  quad(40, 320, 50, 320, 45, 350, 35, 350);

  //right leg
  quad(130, 320, 140, 320, 145, 350, 135, 350);


  //CANVAS
  stroke(0);
  fill(255);
  rect(40, 220, 140, 320);


  //TEXT (CANVAS)

  // "HELP ME"
  stroke(#6E0805);
  strokeWeight(4);
  
  //h
  line(50, 230, 50, 250);
  line(50, 240, 60, 240);
  line(60, 230, 60, 250);
  
  //e
  line(70, 230, 70, 250);
  line(70, 230, 80, 230);
  line(70, 240, 80, 240);
  line(70, 250, 80, 250);
  
  //l
  line(90, 230, 90, 250);
  line(90, 250, 100, 250);
  
  //p
  line(110, 230, 110, 250);
  line(110, 230, 120, 230);
  line(110, 240, 120, 240);
  line(120, 230, 120, 240);
  
  //m
  line(60, 260, 60, 300);
  line(60, 260, 75, 280);
  line(75, 280, 90, 260);
  line(90, 260, 90, 300);
  
  //e2
  line(100, 260, 100, 300);
  line(100, 260, 120, 260);
  line(100, 280, 120, 280);
  line(100, 300, 120, 300);
  
  strokeWeight(1);
  

  //PAGE 1
  stroke(0);
  fill(255);
  rect(20 + mouseX/50, 50 + mouseY/50, 50 + mouseX/50, 90 + mouseY/50);
  line(25 + mouseX/50, 60 + mouseY/50, 45 + mouseX/50, 60 + mouseY/50);
  line(25 + mouseX/50, 70 + mouseY/50, 45 + mouseX/50, 70 + mouseY/50);
  line(25 + mouseX/50, 80 + mouseY/50, 45 + mouseX/50, 80 + mouseY/50);

  //PAGE 2
  stroke(0);
  fill(255);
  quad(80 - mouseX/10, 40 + mouseY/10, 100 - mouseX/10, 20 + mouseY/10, 130 - mouseX/10, 50 + mouseY/10, 110 - mouseX/10, 70 + mouseY/10);


  //PAINTBRUSH 1
  //paint
  stroke(0);
  fill(#FF0000);
  triangle(50 + mouseX/5, 230 + mouseY/5, 55 + mouseX/5, 225 + mouseY/5, 45 + mouseX/5, 220 + mouseY/5);

  //brush
  fill(#A58B68);
  ellipse(50 + mouseX/5, 225 + mouseY/5, 60 + mouseX/5, 235 + mouseY/5);

  //handle
  fill(#E5C291);
  quad(60 + mouseX/5, 230 + mouseY/5, 80 + mouseX/5, 260 + mouseY/5, 75 + mouseX/5, 265 + mouseY/5, 55 + mouseX/5, 235 + mouseY/5);


  //PAINTBRUSH 2
  //paint
  stroke(0);
  fill(#FF0000);
  triangle(180 + mouseX/7, 20 + mouseY/7, 175 + mouseX/7, 30 + mouseY/7, 170 + mouseX/7, 25 + mouseY/7);

  //brush
  fill(#A58B68);
  ellipse(165 + mouseX/7, 25 + mouseY/7, 175 + mouseX/7, 35 + mouseY/7); 

  //handle
  fill(#E5C291);
  quad(165 + mouseX/7, 30 + mouseY/7, 170 + mouseX/7, 35 + mouseY/7, 160 + mouseX/7, 55 + mouseY/7, 155 + mouseX/7, 50 + mouseY/7);


  //PAINTBRUSH 3
  //paint
  stroke(0);
  fill(#FF0000);
  triangle(360 - mouseX/4, 285 - mouseY/4, 370 - mouseX/4, 280 - mouseY/4, 365 - mouseX/4, 290 - mouseY/4);

  //brush
  fill(#A58B68);
  ellipse(355 - mouseX/4, 285 - mouseY/4, 365 - mouseX/4, 295 - mouseY/4);

  //handle
  fill(#E5C291);
  quad(355 - mouseX/4, 290 - mouseY/4, 360 - mouseX/4, 295 - mouseY/4, 350 - mouseX/4, 320 - mouseY/4, 345 - mouseX/4, 315 - mouseY/4);


  //ARTIST GHOST
  //body
  stroke(0);
  fill(255);
  rect(160, 220 - mouseY/6, 220, 320 - mouseY/6);

  //moustache
  stroke(0);
  strokeWeight(1.5);
  line(187.5, 267.5 - mouseY/6, 175, 270 - mouseY/6);
  line(192.5, 267.5 - mouseY/6, 205, 270 - mouseY/6);
  strokeWeight(1);

  //scarf
  stroke(0);
  fill(#FF0000);
  rect(160, 280 - mouseY/6, 220, 290 - mouseY/6);
  quad(220, 280 - mouseY/6, 235, 300 - mouseY/6, 225, 300 - mouseY/6, 220, 290 - mouseY/6);

  //stripes
  stroke(0);
  strokeWeight(2);
  line(160, 295 - mouseY/6, 220, 295 - mouseY/6);
  line(160, 305 - mouseY/6, 220, 305 - mouseY/6);
  line(160, 315 - mouseY/6, 220, 315 - mouseY/6);
  strokeWeight(1);

  //eyes
  stroke(0);
  strokeWeight(1.5);
  line(180, 240 - mouseY/6, 180, 260 - mouseY/6);
  line(200, 240 - mouseY/6, 200, 260 - mouseY/6);
  strokeWeight(1);

  //hat
  stroke(0);
  fill(0);
  ellipse(155, 210 - mouseY/6, 225, 235 - mouseY/6);
  rect(205, 205 - mouseY/6, 210, 220 - mouseY/6);
  
  println("Press any key.");
}