/* Kobold Run Jared Moeller Sept. 6, 2017 Mouse (Vertical movement) - Day/night cycle Mouse (Horizontle movement) - Kobold runs (background scrolls) Mouse (click) - Kobold Laughs */ ////////////////////////////////////////////////////// setup //////////////////////////////////////////////////////// void setup() { size(400, 400); frameRate(60); } //////////////////////////////////////////////////////////// draw ///////////////////////////////////////////////////// void draw() { rectMode(CORNERS); ellipseMode(CENTER); noStroke(); //////////////////////////////////////////////////// background //////////////////////////////////////////////////// ////////////////////////////////////////////////////// sky // day sky color background(60, 120, 200); ///////////////////////////////////////////////////// stars stroke(255, 255, 190, (mouseY/2.5)); strokeWeight(3); // placing stars 10 apart each on x axis gave good sense of spacing point(10, 120); point(20, 20); point(30, 100); point(40, 50); point(50, 80); point(60, 110); point(70, 15); point(80, 60); point(90, 30); point(100, 90); point(110, 60); point(120, 10); point(130, 100); point(140, 80); point(150, 30); point(160, 40); point(170, 110); point(180, 50); point(190, 70); point(200, 90); point(210, 20); point(220, 40); point(230, 10); point(240, 90); point(250, 60); point(260, 30); point(270, 100); point(280, 120); point(290, 80); point(300, 50); point(310, 70); point(320, 20); point(330, 75); point(340, 40); point(350, 30); point(360, 70); point(370, 20); point(380, 100); point(390, 20); // sun - moon noStroke(); fill(255); //sun starts it's parabolic curve at peak ellipse((200+(mouseY/1.6)), .002*sq((mouseY))+40, 10, 10); fill(255, 255, 190); //moon is tuned to end at peak ellipse(-50+((mouseY/1.6)), .002*sq((mouseY-400))+40, 10, 10); ///////////////////////////////////////////////////////////////////// clouds 1 - 2 - 3 (close) // each cloud is comprised of 3 grey rectangles, (day only) fill(235, 400-mouseY); rect(300-(mouseX/5), 30, 380-(mouseX/5), 50); rect(40-(mouseX/6), 40, 120-(mouseX/6), 60); fill(210, 400-mouseY); rect(260-(mouseX/8), 40, 340-(mouseX/8), 60); rect(80-(mouseX/7), 50, 140-(mouseX/7), 70); fill(195, 400-mouseY); rect(320-(mouseX/7.5), 50, 420-(mouseX/7.5), 70); rect(-20-(mouseX/9), 60, 100-(mouseX/9), 80); // cloud 1 - 2 - 3 (far) // added to give more 'depth' to background (felt too empty) fill(220, 400-mouseY); rect(160-(mouseX/14), 90, 200-(mouseX/14), 100); fill(225, 400-mouseY); rect(180-(mouseX/10), 100, 230-(mouseX/10), 110); fill(210, 400-mouseY); rect(190-(mouseX/12), 95, 240-(mouseX/12), 105); /////////////////////////////////////////////////////////////////////////////// treeline base // to allow for the background to be constructed easily, started with 'strips' fill(0, 150, 0); rect(0, 140, 400, 160); /////////////////////////////////////////////////////////////////////////////// treeline shrubbage // basic 'tree' effect done by repeated circles. ellipse(5-(mouseX/20), 140, 10, 10); ellipse(12-(mouseX/20), 140, 15, 15); ellipse(25-(mouseX/20), 140, 10, 10); ellipse(32-(mouseX/20), 140, 15, 15); ellipse(45-(mouseX/20), 140, 10, 10); ellipse(52-(mouseX/20), 140, 15, 15); ellipse(65-(mouseX/20), 140, 10, 10); ellipse(72-(mouseX/20), 140, 15, 15); ellipse(85-(mouseX/20), 140, 10, 10); ellipse(92-(mouseX/20), 140, 15, 15); ellipse(105-(mouseX/20), 140, 10, 10); ellipse(112-(mouseX/20), 140, 15, 15); ellipse(125-(mouseX/20), 140, 10, 10); ellipse(132-(mouseX/20), 140, 15, 15); ellipse(145-(mouseX/20), 140, 10, 10); ellipse(152-(mouseX/20), 140, 15, 15); ellipse(165-(mouseX/20), 140, 10, 10); ellipse(172-(mouseX/20), 140, 15, 15); ellipse(185-(mouseX/20), 140, 10, 10); ellipse(192-(mouseX/20), 140, 15, 15); ellipse(205-(mouseX/20), 140, 10, 10); ellipse(212-(mouseX/20), 140, 15, 15); ellipse(225-(mouseX/20), 140, 10, 10); ellipse(232-(mouseX/20), 140, 15, 15); ellipse(245-(mouseX/20), 140, 10, 10); ellipse(252-(mouseX/20), 140, 15, 15); ellipse(265-(mouseX/20), 140, 10, 10); ellipse(272-(mouseX/20), 140, 15, 15); ellipse(285-(mouseX/20), 140, 10, 10); ellipse(292-(mouseX/20), 140, 15, 15); ellipse(305-(mouseX/20), 140, 10, 10); ellipse(312-(mouseX/20), 140, 15, 15); ellipse(325-(mouseX/20), 140, 10, 10); ellipse(332-(mouseX/20), 140, 15, 15); ellipse(345-(mouseX/20), 140, 10, 10); ellipse(352-(mouseX/20), 140, 15, 15); ellipse(365-(mouseX/20), 140, 10, 10); ellipse(372-(mouseX/20), 140, 15, 15); ellipse(385-(mouseX/20), 140, 10, 10); ellipse(392-(mouseX/20), 140, 15, 15); ellipse(405-(mouseX/20), 140, 10, 10); ellipse(412-(mouseX/20), 140, 15, 15); /////////////////////////////////////////////////////////////////////////////////// hexes 1 fill(0, 170, 0); rect(0, 160, 400, 200); // triangles same as 'strip blend in triangle(0-(mouseX/10), 160, 20-(mouseX/10), 150, 40-(mouseX/10), 160); triangle(80-(mouseX/10), 160, 100-(mouseX/10), 150, 120-(mouseX/10), 160); triangle(160-(mouseX/10), 160, 180-(mouseX/10), 150, 200-(mouseX/10), 160); triangle(240-(mouseX/10), 160, 260-(mouseX/10), 150, 280-(mouseX/10), 160); triangle(320-(mouseX/10), 160, 340-(mouseX/10), 150, 360-(mouseX/10), 160); triangle(400-(mouseX/10), 160, 420-(mouseX/10), 150, 440-(mouseX/10), 160); fill(50, 170, 50); //contrasting lighter, tris and rects make checker effect, to better define background triangle(40-(mouseX/10), 160, 60-(mouseX/10), 150, 80-(mouseX/10), 160); rect(40-(mouseX/10), 160, 80-(mouseX/10), 400); triangle(120-(mouseX/10), 160, 140-(mouseX/10), 150, 160-(mouseX/10), 160); rect(120-(mouseX/10), 160, 160-(mouseX/10), 400); triangle(200-(mouseX/10), 160, 220-(mouseX/10), 150, 240-(mouseX/10), 160); rect(200-(mouseX/10), 160, 240-(mouseX/10), 400); triangle(280-(mouseX/10), 160, 300-(mouseX/10), 150, 320-(mouseX/10), 160); rect(280-(mouseX/10), 160, 320-(mouseX/10), 400); triangle(360-(mouseX/10), 160, 380-(mouseX/10), 150, 400-(mouseX/10), 160); rect(360-(mouseX/10), 160, 400-(mouseX/10), 400); /////////////////////////////////////////////////////////////////////////////////// hexes 2 fill(0, 190, 0); rect(0, 200, 400, 240); triangle(30-(mouseX/5), 200, 60-(mouseX/5), 180, 90-(mouseX/5), 200); triangle(150-(mouseX/5), 200, 180-(mouseX/5), 180, 210-(mouseX/5), 200); triangle(270-(mouseX/5), 200, 300-(mouseX/5), 180, 330-(mouseX/5), 200); triangle(390-(mouseX/5), 200, 420-(mouseX/5), 180, 450-(mouseX/5), 200); fill(60, 190, 60); triangle(-30-(mouseX/5), 200, 0-(mouseX/5), 180, 30-(mouseX/5), 200); rect(-30-(mouseX/5), 200, 30-(mouseX/5), 400); triangle(90-(mouseX/5), 200, 120-(mouseX/5), 180, 150-(mouseX/5), 200); rect(90-(mouseX/5), 200, 150-(mouseX/5), 400); triangle(210-(mouseX/5), 200, 240-(mouseX/5), 180, 270-(mouseX/5), 200); rect(210-(mouseX/5), 200, 270-(mouseX/5), 400); triangle(330-(mouseX/5), 200, 360-(mouseX/5), 180, 390-(mouseX/5), 200); rect(330-(mouseX/5), 200, 390-(mouseX/5), 400); triangle(450-(mouseX/5), 200, 480-(mouseX/5), 180, 510-(mouseX/5), 200); rect(450-(mouseX/5), 200, 510-(mouseX/5), 400); ////////////////////////////////////////////////////////////////////////////////////// hexes 3 fill(0, 210, 0); rect(0, 240, 400, 300); triangle(0-(mouseX/2.5), 240, 40-(mouseX/2.5), 220, 80-(mouseX/2.5), 240); triangle(160-(mouseX/2.5), 240, 200-(mouseX/2.5), 220, 240-(mouseX/2.5), 240); triangle(320-(mouseX/2.5), 240, 360-(mouseX/2.5), 220, 400-(mouseX/2.5), 240); triangle(480-(mouseX/2.5), 240, 520-(mouseX/2.5), 220, 560-(mouseX/2.5), 240); fill(90, 210, 90); triangle(80-(mouseX/2.5), 240, 120-(mouseX/2.5), 220, 160-(mouseX/2.5), 240); rect(80-(mouseX/2.5), 240, 160-(mouseX/2.5), 400); triangle(240-(mouseX/2.5), 240, 280-(mouseX/2.5), 220, 320-(mouseX/2.5), 240); rect(240-(mouseX/2.5), 240, 320-(mouseX/2.5), 400); triangle(400-(mouseX/2.5), 240, 440-(mouseX/2.5), 220, 480-(mouseX/2.5), 240); rect(400-(mouseX/2.5), 240, 480-(mouseX/2.5), 400); ///////////////////////////////////////////////////////////////////////////////////////// hexes 4 fill(0, 230, 0); rect(0, 300, 400, 380); triangle(60-(mouseX/1.25), 300, 120-(mouseX/1.25), 280, 180-(mouseX/1.25), 300); triangle(300-(mouseX/1.25), 300, 360-(mouseX/1.25), 280, 420-(mouseX/1.25), 300); triangle(540-(mouseX/1.25), 300, 600-(mouseX/1.25), 280, 660-(mouseX/1.25), 300); fill(120, 230, 120); triangle(-60-(mouseX/1.25), 300, 0-(mouseX/1.25), 280, 60-(mouseX/1.25), 300); rect(-60-(mouseX/1.25), 300, 60-(mouseX/1.25), 400); triangle(180-(mouseX/1.25), 300, 240-(mouseX/1.25), 280, 300-(mouseX/1.25), 300); rect(180-(mouseX/1.25), 300, 300-(mouseX/1.25), 400); triangle(420-(mouseX/1.25), 300, 480-(mouseX/1.25), 280, 540-(mouseX/1.25), 300); rect(420-(mouseX/1.25), 300, 540-(mouseX/1.25), 400); triangle(660-(mouseX/1.25), 300, 720-(mouseX/1.25), 280, 780-(mouseX/1.25), 300); rect(660-(mouseX/1.25), 300, 780-(mouseX/1.25), 400); ////////////////////////////////////////////////////////////////////////////////////////// hexes 5 fill(0, 250, 0); rect(0, 380, 400, 400); triangle(0-(mouseX/0.625), 380, 80-(mouseX/0.625), 340, 160-(mouseX/0.625), 380); triangle(320-(mouseX/0.625), 380, 400-(mouseX/0.625), 340, 480-(mouseX/0.625), 380); triangle(640-(mouseX/0.625), 380, 720-(mouseX/0.625), 340, 800-(mouseX/0.625), 380); triangle(960-(mouseX/0.625), 380, 1040-(mouseX/0.625), 340, 1120-(mouseX/0.625), 380); fill(150, 250, 150); triangle(160-(mouseX/0.625), 380, 240-(mouseX/0.625), 340, 320-(mouseX/0.625), 380); rect(160-(mouseX/0.625), 380, 320-(mouseX/0.625), 400); triangle(480-(mouseX/0.625), 380, 560-(mouseX/0.625), 340, 640-(mouseX/0.625), 380); rect(480-(mouseX/0.625), 380, 640-(mouseX/0.625), 400); triangle(800-(mouseX/0.625), 380, 880-(mouseX/0.625), 340, 960-(mouseX/0.625), 380); rect(800-(mouseX/0.625), 380, 960-(mouseX/0.625), 400); /////////////////////////////////////////////////////////////// middleground rectMode(CORNER); ellipseMode(CORNER); fill(128, 105, 81); ////////////////////////////////////////////////////////////// head rect(70+(mouseX/2), 220-abs((4*sin(mouseX/20))), 40, 40); //////////////////////////////////////////////////////////////// face rect(110+(mouseX/2), 230-abs((4*sin(mouseX/20))), 10, 20); triangle(110+(mouseX/2), 220-abs((4*sin(mouseX/20))), 110+(mouseX/2), 230-abs((4*sin(mouseX/20))), 120+(mouseX/2), 230-abs((4*sin(mouseX/20)))); triangle(110+(mouseX/2), 260-abs((4*sin(mouseX/20))), 110+(mouseX/2), 250-abs((4*sin(mouseX/20))), 120+(mouseX/2), 250-abs((4*sin(mouseX/20)))); /////////////////////////////////////////////////////////////// body rect(60+(mouseX/2), 260-abs((4*sin(mouseX/20))), 50, 40); //////////////////////////////////////////////////////////////// hood triangle(60+(mouseX/2), 200-abs((4*sin(mouseX/20))), 110+(mouseX/2), 220-abs((4*sin(mouseX/20))), 70+(mouseX/2), 240-abs((4*sin(mouseX/20)))); triangle(70+(mouseX/2), 240-abs((4*sin(mouseX/20))), 60+(mouseX/2), 260-abs((4*sin(mouseX/20))), 70+(mouseX/2), 260-abs((4*sin(mouseX/20)))); ////////////////////////////////////////////////////////////////// arm triangle(60+(mouseX/2), 260-abs((4*sin(mouseX/20))), 40+(mouseX/2), 280-abs((4*sin(mouseX/20))), 60+(mouseX/2), 280-abs((4*sin(mouseX/20)))); rect(40+(mouseX/2), 280-abs((4*sin(mouseX/20))), 10, 10); ////////////////////////////////////////////////////////////////// pants and legs // legs stroke(79, 79, 91); strokeWeight(10); line(104+(mouseX/2), 298-abs((4*sin(mouseX/20))), 104+(mouseX/2)+(5*sin(mouseX/8)), 303-abs((4*sin(mouseX/20)))-(5*cos(mouseX/8))); line(104+(mouseX/2)+(5*sin(mouseX/8)), 303-abs((4*sin(mouseX/20)))-(5*cos(mouseX/8)), 104+(mouseX/2)+(7*sin(mouseX/8)), 310-abs((3*sin(mouseX/20)))-(4*cos(mouseX/8))); // two lines with jointed points and circular motion used to creat a 'crab-like' walk cycle. line(65+(mouseX/2), 298-abs((4*sin((mouseX+70)/20))), 65+(mouseX/2)+(5*sin((mouseX+70)/8)), 303-abs((4*sin((mouseX+70)/20)))-(5*cos((mouseX+70)/8))); line(65+(mouseX/2)+(5*sin((mouseX+70)/8)), 303-abs((4*sin((mouseX+70)/20)))-(5*cos((mouseX+70)/8)), 65+(mouseX/2)+(7*sin((mouseX+70)/8)), 310-abs((3*sin((mouseX+70)/20)))-(4*cos((mouseX+70)/8))); noStroke(); // pants fill(79, 79, 91); rect(60+(mouseX/2), 290-abs((4*sin(mouseX/20))), 50, 10); fill(71, 60, 46); rect(60+(mouseX/2), 285-abs((4*sin(mouseX/20))), 50, 5); ////////////////////////////////////////////////////////////////////// eyes and mouth fill(255); ellipse(80+(mouseX/2), 220-abs((4*sin(mouseX/20))), 10, 10); ellipse(110+(mouseX/2), 225-abs((4*sin(mouseX/20))), 5, 5); fill(177, 122, 108); triangle(80+(mouseX/2), 240-abs((4*sin(mouseX/20))), 120+(mouseX/2), 240-abs((4*sin(mouseX/20))), 120+(mouseX/2), 250-abs((4*sin(mouseX/20)))); fill(172, 116, 101, 400-mouseY/1.5); triangle(80+(mouseX/2), 240-abs((4*sin(mouseX/20))), 120+(mouseX/2), 240-abs((4*sin(mouseX/20))), 120+(mouseX/2), 245-abs((4*sin(mouseX/20)))); ///////////////////////////////////////////////////////////////////////// arm and stabby bit fill(128, 105, 81); triangle(110+(mouseX/2), 250-abs((4*sin(mouseX/20))), 110+(mouseX/2), 270-abs((4*sin(mouseX/20))), 120+(mouseX/2), 270-abs((4*sin(mouseX/20)))); rect(110+(mouseX/2), 270-abs((4*sin(mouseX/20))), 20, 10); fill(79, 79, 91); rect(130+(mouseX/2), 265-abs((4*sin(mouseX/20))), 5, 20); fill(102, 102, 120); triangle(135+(mouseX/2), 280-abs((4*sin(mouseX/20))), 135+(mouseX/2), 270-abs((4*sin(mouseX/20))), 165+(mouseX/2), 275-abs((4*sin(mouseX/20)))); ////////////////////////////////////////////////////////////////////////// foreground // night color overlay fill(10, 0, 50, (mouseY/2.5)); rect(0, 0, 400, 400); } ////////////////////////////////////////////////////////////////////////////// laugh void mousePressed() { println("Nyeh heh heh!"); } ////////////////////////////////////////////////////////////////////////////// ??? void keyPressed() { }