/*
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.");
}