/*
Interactive Drawing Title: Squirtle VS Diglett
Submission Date: September 18th, 2018
Created By: Patrick Sakamoto
*/
void setup () {
//Set canvas size to 400x400 pixels.
size(400, 400);
}
void draw() {
//Set framerate to 60FPS.
frameRate(60);
//Environment
//Background (Sky Blue)
background(0, 157, 255);
rectMode(CORNERS);
ellipseMode(CENTER);
//Grass field. (Green gradient, no stroke to prevent blockiness, colour changes to create the illusion of distance.)
noStroke();
fill(46, 185, 0);
rect(0, 75, 400, 400);
fill(29, 177, 0);
rect(0, 125, 400, 400);
fill(27, 170, 0);
rect(0, 175, 400, 400);
fill(25, 162, 0);
rect(0, 225, 400, 400);
fill(23, 155, 0);
rect(0, 275, 400, 400);
fill(21, 148, 0);
rect(0, 325, 400, 400);
//Patches of lighter grass.
fill(158, 218, 93);
ellipse(40, 180, 120, 40);
fill(140, 218, 100);
ellipse(340, 280, 210, 40);
//Player stage.
stroke(199, 157, 102);
fill(204, 168, 121);
ellipse(0, 450, 500, 250);
stroke(199, 157, 56);
fill(221, 193, 155);
ellipse(0, 450, 400, 200);
//Enemy stage.
stroke(141, 84, 56);
fill(222, 170, 111);
ellipse(305, 120, 150, 50);
//Player HP.
stroke(0);
fill(255);
rect(225, 300, 375, 350);
fill(104, 244, 18);
rect(250, 330, 365, 340);
//Enemy HP.
stroke(0);
fill(255);
rect(25, 50, 175, 100);
fill(104, 244, 18);
rect(50, 80, 165, 90);
//End of Environment
//Diglett
rectMode(CORNERS);
ellipseMode(CORNER);
strokeWeight(2);
stroke(0);
//Body
fill(199, 162, 130);
rect(280, mouseY*0.1+50, 330, 120);
arc(280, mouseY*0.1+37, 50, 30, PI, 2*PI);
//Nose
ellipseMode(CENTER);
fill(255, 208, 244);
ellipse(305, mouseY*0.1+75, 25, 15);
//Eyes
fill(0);
ellipse(295, mouseY*0.1+56, 4, 10);
ellipse(315, mouseY*0.1+56, 4, 10);
//Pebbles+Rocks
rectMode(CENTER);
fill(160, 158, 160);
rect(330, 120, 20, 10);
rect(280, 120, 10, 15);
rect(305, 120, 20, 20);
triangle(280, 120, 300, 110, 295, 135);
triangle(315, 130, 300, 110, 325, 115);
//End of Diglett
//Bubbles
strokeWeight(3);
stroke(183, 227, 247);
fill(183, 227, 247, 180);
//Bubble size scales with Y-axis to create illusion of distance.
ellipse(mouseX, mouseY, mouseY*0.15, mouseY*0.15);
ellipse(mouseX*0.95, mouseY*0.95+40, mouseY*0.15+10, mouseY*0.15+10);
ellipse(mouseX*0.82, mouseY*0.82+60, mouseY*0.15+20, mouseY*0.15+20);
ellipse(mouseX*0.60+30, mouseY*0.60+140, mouseY*0.15+30, mouseY*0.15+30);
//End of Bubbles
//Squirtle
ellipseMode(CENTER);
//Head
stroke(0);
strokeWeight(3);
fill(144, 207, 225);
ellipse(mouseX*0.1+80, mouseY*0.1+275, 90, 90);
//Eye
fill(0);
ellipse(mouseX*0.1+95, mouseY*0.1+260, 12, 12);
//Shell details.
stroke(0);
strokeWeight(2);
fill(255);
ellipse(mouseX*0.1+70, mouseY*0.1+375, 40, 140);
fill(194, 133, 110);
arc(mouseX*0.1+60, mouseY*0.1+375, 100, 130, HALF_PI, PI+HALF_PI);
// Left Arm here for Layering
strokeWeight(2);
fill(144, 207, 225);
arc(mouseX*0.1+85, mouseY*0.1+350, 70, 30, PI+HALF_PI, 2*PI+HALF_PI);
//Shell Continued
fill(226, 213, 183);
arc(mouseX*0.1+80, mouseY*0.1+375, 30, 130, PI+HALF_PI, PI*2+HALF_PI);
strokeWeight(4);
line(mouseX*0.1+40, mouseY*0.1+360, mouseX*0.1+40, mouseY*0.1+400);
line(mouseX*0.1+40, mouseY*0.1+360, mouseX*0.1+20, mouseY*0.1+340);
line(mouseX*0.1+40, mouseY*0.1+360, mouseX*0.1+58, mouseY*0.1+340);
//Right Arm
strokeWeight(2);
fill(144, 207, 225);
arc(mouseX*0.1+90, mouseY*0.1+360, 70, 30, PI+HALF_PI, 2*PI+HALF_PI);
//End of Squirtle
}
//Key Press Message
void keyPressed(){
println("Squirtle used Bubble!");
}
//Clickable Interaction (Bubble Pop!)
//Copies previous draw coordinates to ensure continuity of mouse movement and mouse clicks.
void mousePressed(){
frameRate(1);
println("It's SUPER EFFECTIVE!!");
//Environment
//Background (Sky Blue)
background(0, 157, 255);
rectMode(CORNERS);
ellipseMode(CENTER);
//Grass field. (Green gradient, no stroke to prevent blockiness.)
noStroke();
fill(46, 185, 0);
rect(0, 75, 400, 400);
fill(29, 177, 0);
rect(0, 125, 400, 400);
fill(27, 170, 0);
rect(0, 175, 400, 400);
fill(25, 162, 0);
rect(0, 225, 400, 400);
fill(23, 155, 0);
rect(0, 275, 400, 400);
fill(21, 148, 0);
rect(0, 325, 400, 400);
//Patches of lighter grass.
fill(158, 218, 93);
ellipse(40, 180, 120, 40);
fill(140, 218, 100);
ellipse(340, 280, 210, 40);
//Player stage.
stroke(199, 157, 102);
fill(204, 168, 121);
ellipse(0, 450, 500, 250);
stroke(199, 157, 56);
fill(221, 193, 155);
ellipse(0, 450, 400, 200);
//Enemy stage.
stroke(141, 84, 56);
fill(222, 170, 111);
ellipse(305, 120, 150, 50);
//Player HP.
stroke(0);
fill(255);
rect(225, 300, 375, 350);
fill(104, 244, 18);
rect(250, 330, 365, 340);
//Enemy HP Changes based on mouse position, turns red as a "damaged" HP bar.
stroke(0);
fill(255);
rect(25, 50, 175, 100);
fill(255, 0, 0);
rect(mouseX/7.5-mouseY/7.5+110, 80, 165, 90);
//End of Environment
//Diglett
rectMode(CORNERS);
ellipseMode(CORNER);
strokeWeight(2);
stroke(0);
//Body
fill(199, 162, 130);
rect(280, mouseY*0.1+50, 330, 120);
arc(280, mouseY*0.1+37, 50, 30, PI, 2*PI);
//Nose
ellipseMode(CENTER);
fill(255, 208, 244);
ellipse(305, mouseY*0.1+75, 25, 15);
//Eyes (" > < " variation for getting hit by attack)
stroke(0);
line(298, mouseY*0.1+56, 294, mouseY*0.1+53);
line(298, mouseY*0.1+56, 294, mouseY*0.1+59);
line(312, mouseY*0.1+56, 316, mouseY*0.1+53);
line(312, mouseY*0.1+56, 316, mouseY*0.1+59);
//Pebbles+Rocks
rectMode(CENTER);
fill(160, 158, 160);
rect(330, 120, 20, 10);
rect(280, 120, 10, 15);
rect(305, 120, 20, 20);
triangle(280, 120, 300, 110, 295, 135);
triangle(315, 130, 300, 110, 325, 115);
//End of Diglett
//Bubble Pop
strokeWeight(3);
stroke(183, 227, 247);
fill(183, 227, 247, 180);
// Uses ellipse centres as points of reference for pop locations.
line(mouseX-15, mouseY-15, mouseX+15, mouseY+15);
line(mouseX-15, mouseY+15, mouseX+15, mouseY-15);
line(mouseX, mouseY+15, mouseX, mouseY-15);
line(mouseX+15, mouseY, mouseX-15, mouseY);
line(mouseX*0.95, mouseY*0.95+60, mouseX*0.95, mouseY*0.95+20);
line(mouseX*0.95+20, mouseY*0.95+40, mouseX*0.95-20, mouseY*0.95+40);
line(mouseX*0.95+20, mouseY*0.95+20, mouseX*0.95-20, mouseY*0.95+60);
line(mouseX*0.95-20, mouseY*0.95+20, mouseX*0.95+20, mouseY*0.95+60);
line(mouseX*0.82, mouseY*0.82+30, mouseX*0.82, mouseY*0.82+90);
line(mouseX*0.82+30, mouseY*0.82+60, mouseX*0.82-30, mouseY*0.82+60);
line(mouseX*0.82+30, mouseY*0.82+90, mouseX*0.82-30, mouseY*0.82+30);
line(mouseX*0.82-30, mouseY*0.82+90, mouseX*0.82+30, mouseY*0.82+30);
line(mouseX*0.60+30, mouseY*0.60+80, mouseX*0.60+30, mouseY*0.60+200);
line(mouseX*0.60+90, mouseY*0.60+140, mouseX*0.60-30, mouseY*0.60+140);
line(mouseX*0.60+90, mouseY*0.60+80, mouseX*0.60-30, mouseY*0.60+200);
line(mouseX*0.60-30, mouseY*0.60+80, mouseX*0.60+90, mouseY*0.60+200);
//End of Bubbles
//Squirtle
ellipseMode(CENTER);
//Head
stroke(0);
strokeWeight(3);
fill(144, 207, 225);
ellipse(mouseX*0.1+80, mouseY*0.1+275, 90, 90);
//Eye
fill(0);
ellipse(mouseX*0.1+95, mouseY*0.1+260, 12, 12);
//Shell details.
stroke(0);
strokeWeight(2);
fill(255);
ellipse(mouseX*0.1+70, mouseY*0.1+375, 40, 140);
fill(194, 133, 110);
arc(mouseX*0.1+60, mouseY*0.1+375, 100, 130, HALF_PI, PI+HALF_PI);
// Left Arm here for Layering
strokeWeight(2);
fill(144, 207, 225);
arc(mouseX*0.1+85, mouseY*0.1+350, 70, 30, PI+HALF_PI, 2*PI+HALF_PI);
//Shell Continued
fill(226, 213, 183);
arc(mouseX*0.1+80, mouseY*0.1+375, 30, 130, PI+HALF_PI, PI*2+HALF_PI);
strokeWeight(4);
line(mouseX*0.1+40, mouseY*0.1+360, mouseX*0.1+40, mouseY*0.1+400);
line(mouseX*0.1+40, mouseY*0.1+360, mouseX*0.1+20, mouseY*0.1+340);
line(mouseX*0.1+40, mouseY*0.1+360, mouseX*0.1+58, mouseY*0.1+340);
//Right Arm
strokeWeight(2);
fill(144, 207, 225);
arc(mouseX*0.1+90, mouseY*0.1+360, 70, 30, PI+HALF_PI, 2*PI+HALF_PI);
//End of Squirtle
}