Created
September 16, 2020 18:47
-
-
Save SharkFinPro/f93cad20ac26856684ecaed3a3ed5522 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| /** Main Variables **/ | |
| var clicked, | |
| pressed, | |
| keys = {}, | |
| candies = [], | |
| bombs = [], | |
| platforms = [], | |
| lavas = [], | |
| boosts = [], | |
| ends = [], | |
| waters = [], | |
| quicksands = [], | |
| bouncers = [], | |
| scene = 'menu', | |
| level = 1, | |
| levelGen, | |
| shadow = 0; | |
| /** General Functions **/ | |
| mousePressed = function() { | |
| clicked = true; | |
| }; | |
| mouseReleased = function() { | |
| clicked = false; | |
| }; | |
| keyPressed = function() { | |
| keys[keyCode] = true; | |
| pressed = true; | |
| }; | |
| keyReleased = function() { | |
| delete keys[keyCode]; | |
| pressed = false; | |
| }; | |
| var rectToRectCollide = function(box1X, box1Y, box1Width, box1Height, box2X, box2Y, box2Width, box2Height) { | |
| return box1X + box1Width > box2X + 1 && box1X < box2X + box2Width - 1 && box1Y + box1Height > box2Y + 1 && box1Y < box2Y + box2Height - 1; | |
| }; | |
| var circleToRectCollide = function(boxX, boxY, boxWidth, boxHeight, circleX, circleY, circleRadius) { | |
| var cx = circleX - max(boxX, min(circleX, boxX + boxWidth)); // X distance mouse is from rectangle | |
| var cy = circleY - max(boxY, min(circleY, boxY + boxHeight)); // Y distance mouse is from rectangle | |
| return (cx * cx + cy * cy) < (circleRadius * circleRadius); // See if X&Y distance mouse is from rectangle is equal to or less than 0 | |
| }; | |
| var resetLevels = function() { | |
| candies = []; | |
| bombs = []; | |
| platforms = []; | |
| lavas = []; | |
| boosts = []; | |
| ends = []; | |
| waters = []; | |
| quicksands = []; | |
| bouncers = []; | |
| }; | |
| var setShadows = function() { | |
| shadow = 0; | |
| }; | |
| /** Images **/ | |
| // stalagmites + stalactites for cave | |
| var cavePoints = []; | |
| for(var i = 0; i <= width; i += 10){ | |
| cavePoints.push({ | |
| x: i, | |
| y: width-(width/5) + random(100, -100) | |
| }); | |
| } | |
| var stalagmites = function(x, y, color){ | |
| noStroke(); | |
| if(x === 0 && y === 0){ | |
| strokeWeight(3); | |
| stroke(184, 223, 255, 100); | |
| } | |
| fill(color); | |
| beginShape(); | |
| vertex(0, height); | |
| for(var i in cavePoints){ | |
| vertex(cavePoints[i].x + x, cavePoints[i].y + y); | |
| } | |
| vertex(width, height); | |
| endShape(); | |
| }; | |
| var stalactites = function(x, y, color){ | |
| pushMatrix(); | |
| translate(width, height); | |
| rotate(180); | |
| stalagmites(x, y, color); | |
| popMatrix(); | |
| }; | |
| var images = { | |
| "cobblestoneBG": function(){ | |
| background(0, 0, 0); | |
| noStroke(); | |
| for(var i = -45; i < width; i += 50){ | |
| for(var j = 0; j < height; j += 35){ | |
| noStroke(); | |
| fill(random(50)); | |
| pushMatrix(); | |
| translate(((j/50)%1)*34 + i, j); | |
| rotate(random(-10, 10)); | |
| rect(0, 0, 45, 30, random(30)); | |
| fill(0, 0, 0, random(70)); | |
| rect(0, 0, 45, random(10)); | |
| for(var k = 0; k < 3; k++){ | |
| fill(0); | |
| triangle(0, 30, random(10), 30, random(45), random(20, 30)); | |
| triangle(45, 30, random(35, 45), 30, random(45), random(20, 30)); | |
| triangle(0, 0, random(10), 0, random(45), random(10)); | |
| triangle(45, 0, random(35, 45), 0, random(45), random(10)); | |
| } | |
| popMatrix(); | |
| } | |
| } | |
| filter(BLUR, 1.5); | |
| return get(0, 0, width, height); | |
| }, | |
| "caveBG": function(){ | |
| strokeWeight(10); | |
| for(var i = 0; i <= width; i += 10){ | |
| stroke(lerpColor( | |
| color(0, 7, 13), // The left color | |
| color(51, 77, 102), // The right color | |
| i/width | |
| )); | |
| line(i, 0, i, height); | |
| } | |
| stalagmites(-100, -80, color(0, 0, 0, 50)); | |
| stalagmites(40, -60, color(0, 0, 0, 100)); | |
| stalagmites(-30, -40, color(0, 0, 0, 150)); | |
| stalagmites(10, -20, color(0, 0, 0, 205)); | |
| stalagmites(0, 0, color(0, 0, 0, 255)); | |
| stalactites(-100, -80, color(0, 0, 0, 50)); | |
| stalactites(40, -60, color(0, 0, 0, 100)); | |
| stalactites(-30, -40, color(0, 0, 0, 150)); | |
| stalactites(10, -20, color(0, 0, 0, 205)); | |
| stalactites(0, 0, color(0, 0, 0, 255)); | |
| noFill(); | |
| strokeWeight(10); | |
| for(var i = width*2; i > 0; i -= 20){ | |
| stroke(0, 0, 0, i/4); | |
| ellipse(width/2, height/2, i, i); | |
| } | |
| filter(BLUR, 3); | |
| return get(0, 0, width, height); | |
| }, | |
| "lavaBlock": function(){ | |
| noStroke(); | |
| fill(255, 127, 80); | |
| rect(0, 0, 25, 25); | |
| noStroke(); | |
| return get(0, 0, 25, 25); | |
| }, | |
| 'door': function() { | |
| noStroke(); | |
| pushMatrix(); | |
| translate(15, 48); | |
| scale(1, 1); | |
| noStroke(); | |
| fill(59, 28, 8); | |
| rect(-8, -10, 98, 150); | |
| rect(-15, -43, 115, 28); | |
| fill(48, 24, 8); | |
| rect(0, -3, 82, 10); | |
| fill(138, 68, 51); | |
| rect(-15, -48, 115, 30); | |
| rect(2, 0, 80, 150); | |
| fill(107, 54, 35); | |
| rect(0, 0, 80, 150); | |
| rect(-15, -48, 111, 30); | |
| fill(23, 2, 8, 30); | |
| for (var i = 0; i < 80; i += 9) { | |
| (rect)(0, 0, i, 150, 0, 5, 5, 0); | |
| (rect)(-15, -48, i * 1.4, 30, 0, 5, 5, 0); | |
| } | |
| (fill)(0, 40); | |
| ellipse(60, 83, 15, 15); | |
| fill(199, 69, 46); | |
| ellipse(63, 80, 15, 15); | |
| fill(224, 185, 29, 150); | |
| ellipse(62, 79, 8, 10); | |
| fill(255, 255, 255, 100); | |
| ellipse(59, 77, 5, 5); | |
| popMatrix(); | |
| return get(0, 0, 115, 236); | |
| }, | |
| 'menuBG': function(){ | |
| background(16, 34, 41); | |
| noStroke(); | |
| for(var i = 0; i < 333; i++){ | |
| var aasdlfkjrekjfkjwldfksf = random(6); | |
| var n = random(216, 350); | |
| var c = random(360); | |
| fill(255, 255, 255, random(155)); | |
| ellipse(300 + sin(c) * n, 300 + cos(c) * n, aasdlfkjrekjfkjwldfksf, aasdlfkjrekjfkjwldfksf); | |
| } | |
| fill(242, 242, 198, 30); | |
| for(var i = 0; i < 150; i += 25){ | |
| ellipse(300, 300, 400 + i, 400 + i); | |
| } | |
| fill(214, 210, 167); | |
| ellipse(300, 300, 400, 400); | |
| fill(255, 255, 255, 20); | |
| for(var i = 0; i < 150; i += 25){ | |
| ellipse(300, 300, 250 + i, 250 + i); | |
| } | |
| fill(122, 58, 1); | |
| ellipse(300, 600, 1000, 240); | |
| for(var i = 0; i < 240; i += 20){ | |
| fill(2, 14, 20, 50); | |
| ellipse(300, 600, 1000, i); | |
| } | |
| pushMatrix(); | |
| translate(20, 0); | |
| fill(0, 0, 0, 100); | |
| quad(37, 601, 338, 600, 352, 490, 200, 496); | |
| fill(43, 43, 43); | |
| beginShape(); | |
| vertex(200, 500); | |
| vertex(300, 510); | |
| bezierVertex(302, 444, 293, 368, 310, 300); | |
| bezierVertex(287, 290, 236, 250, 219, 215); | |
| bezierVertex(184, 290, 176, 284, 158, 306); | |
| bezierVertex(189, 379, 186, 443, 200, 500); | |
| endShape(); | |
| fill(61, 61, 61); | |
| beginShape(); | |
| vertex(353, 490); | |
| vertex(299, 510); | |
| bezierVertex(289, 444, 293, 368, 309, 300); | |
| vertex(374, 282); | |
| bezierVertex(352, 344, 336, 440, 353, 490); | |
| endShape(); | |
| fill(89, 89, 89); | |
| beginShape(); | |
| vertex(411, 294); | |
| bezierVertex(358, 338, 315, 325, 317, 327); | |
| bezierVertex(270, 290, 236, 250, 218, 215); | |
| bezierVertex(272, 215, 261, 223, 311, 216); | |
| bezierVertex(326, 215, 336, 276, 407, 292); | |
| endShape(); | |
| fill(20, 19, 19); | |
| beginShape(); | |
| vertex(141, 314); | |
| bezierVertex(186, 275, 196, 250, 218, 220); | |
| vertex(224, 231); | |
| bezierVertex(221, 255, 196, 277, 161, 313); | |
| endShape(); | |
| noFill(); | |
| strokeWeight(9); | |
| stroke(105, 101, 101); | |
| bezier(411, 298, 358, 338, 315, 325, 317, 321); | |
| strokeWeight(9); | |
| stroke(117, 112, 112); | |
| bezier(317, 322, 270, 290, 236, 250, 218, 220); | |
| bezier(141, 310, 186, 275, 196, 250, 218, 220); | |
| fill(23, 23, 23); | |
| strokeWeight(5); | |
| stroke(0); | |
| beginShape(); | |
| vertex(258, 364); | |
| vertex(266, 504); | |
| vertex(224, 500); | |
| vertex(210, 384); | |
| bezierVertex(200, 321, 247, 288, 258, 365); | |
| endShape(); | |
| strokeWeight(3); | |
| line(232, 500, 214, 339); | |
| line(241, 500, 226, 326); | |
| line(251, 500, 240, 326); | |
| line(260, 500, 252, 344); | |
| noStroke(); | |
| fill(145, 92, 23); | |
| ellipse(248, 421, 20, 20); | |
| fill(214, 202, 30, 80); | |
| ellipse(246, 419, 12, 13); | |
| ellipse(245, 418, 5, 5); | |
| fill(201, 159, 44); | |
| stroke(0); | |
| beginShape(); | |
| vertex(317, 437); | |
| bezierVertex(289, 372, 351, 326, 336, 432); | |
| endShape(CLOSE); | |
| noStroke(); | |
| fill(255, 255, 255, 50); | |
| quad(314, 418, 336, 424, 338, 409, 312, 384); | |
| quad(314, 418, 336, 410, 334, 386, 312, 408); | |
| stroke(0); | |
| line(326, 372, 326, 435); | |
| line(311, 409, 337, 405); | |
| popMatrix(); | |
| pushStyle(); | |
| pushMatrix(); | |
| translate(300, 135); | |
| rotate(5); | |
| rectMode(CENTER); | |
| textAlign(CENTER, CENTER); | |
| textFont(createFont('Avenir Bold')); | |
| noStroke(); | |
| fill(0, 0, 0); | |
| rect(57, 34, 209, 31); | |
| rect(0, 0, 387, 60); | |
| rect(-57, -34, 239, 25); | |
| fill(25); | |
| rect(0, 0, 380, 53); | |
| fill(217, 143, 32); | |
| textSize(45); | |
| text('TRICK OR TREAT', 0, 0); | |
| rect(57, 34, 201, 21); | |
| rect(-57, -34, 235, 21); | |
| fill(25); | |
| textSize(15); | |
| text('A NIGHT AT PAPA KETT\'S', 57, 34); | |
| text('CHESTER BANKS + SHARKFIN', -57, -34); | |
| popMatrix(); | |
| popStyle(); | |
| return get(0, 0, 600, 600); | |
| }, | |
| 'chocolateBar': function(){ | |
| noStroke(); | |
| fill(153, 72, 43); | |
| rect(0, 0, 50, 50); | |
| for(var i = 0; i < 4; i++){ | |
| pushMatrix(); | |
| translate(0 + (i > 1 ? -46.5 : 0) + (i * 23), ((i > 1) ? 23 : 0) - 1); | |
| fill(255, 255, 255, 30); | |
| triangle(3, 3, 3, 25, 25, 3); | |
| fill(0, 0, 0, 80); | |
| triangle(25, 25, 3, 25, 25, 3); | |
| fill(153, 72, 43); | |
| rect(5, 5, 17, 18); | |
| fill(235, 217, 211, 30); | |
| rect(5, 5, 4, 18, 10); | |
| popMatrix(); | |
| } | |
| return get(0, 0, 50, 50); | |
| }, | |
| 'mint': function(){ | |
| noStroke(); | |
| fill(242, 220, 220); | |
| ellipse(25, 25, 50, 50); | |
| for(var i = 0; i < 360; i += 45){ | |
| pushMatrix(); | |
| translate(25, 25); | |
| rotate(i); | |
| fill(230, 43, 96); | |
| arc(0, 0, 50, 50, 0, 16); | |
| rotate(27); | |
| arc(0,0, 50, 50, 0, 5); | |
| popMatrix(); | |
| } | |
| fill(255, 255, 255, 50); | |
| ellipse(23, 23, 43, 42); | |
| ellipse(22, 21, 37, 37); | |
| return get(0, 0, 50, 50); | |
| }, | |
| 'eminem': function(){ | |
| textAlign(CENTER, CENTER); | |
| noStroke(); | |
| fill(79, 140, 214); | |
| ellipse(25, 25, 50, 50); | |
| fill(255, 255, 255, 50); | |
| ellipse(23, 23, 43, 42); | |
| ellipse(22, 21, 25, 25); | |
| textSize(27); | |
| fill(255, 255, 255, 200); | |
| text('m', 25, 21); | |
| return get(0, 0, 50, 50); | |
| }, | |
| 'candyCorn': function(){ | |
| noStroke(); | |
| fill(230, 146, 43); | |
| arc(25, 35, 40, 30, 0, 180); | |
| fill(230, 214, 43); | |
| arc(25, 35, 40, 70, -180, 0); | |
| arc(25, 35, 40, 4, 0, 180); | |
| fill(237, 234, 204); | |
| arc(25, 18, 29, 37, -180, 0); | |
| arc(25, 18, 29, 5, 0, 180); | |
| noFill(); | |
| stroke(255, 255, 255); | |
| strokeWeight(5); | |
| bezier(12, 20, 14, 13, 22, 0, 28, 4); | |
| stroke(255, 255, 255, 100); | |
| strokeWeight(12); | |
| bezier(13, 27, 14, 16, 22, 0, 28, 7); | |
| stroke(0, 0, 0, 20); | |
| bezier(18, 43, 30, 47, 43, 38, 37, 24); | |
| return get(0, 0, 50, 50); | |
| }, | |
| 'sucker': function(){ | |
| noStroke(); | |
| fill(182, 76, 224); | |
| ellipse(25, 25, 50, 50); | |
| fill(237, 156, 237, 50); | |
| ellipse(22, 22, 35, 35); | |
| fill(237, 156, 237, 50); | |
| ellipse(18, 20, 15, 15); | |
| noFill(); | |
| stroke(134, 30, 179); | |
| strokeWeight(7); | |
| arc(25,28, 48, 12, 0, 180); | |
| stroke(255, 255, 255, 50); | |
| strokeWeight(2); | |
| arc(25,26, 48, 12, 0, 180); | |
| return get(0, 0, 50, 50); | |
| }, | |
| }; | |
| for(var i in images) { | |
| if(typeof images[i] !== 'object') { | |
| (background)(0, 0); | |
| images[i] = images[i](); | |
| } | |
| } | |
| var candy = ['mint', 'eminem', 'candyCorn', 'sucker']; | |
| /** Player **/ | |
| var Player = { | |
| alive: true, | |
| lives: 3, | |
| candy: 0, | |
| x: 0, | |
| y: 0, | |
| width: 25, | |
| height: 25, | |
| gravity: 0.4, | |
| xvel: 0, | |
| yvel: 0, | |
| speed: 0.5, | |
| maxSpeed: 5, | |
| jumpHeight: 8, | |
| maxFallSpeed: 12, | |
| falling: true, | |
| swimming: false, | |
| bouncing: false, | |
| sinking: false, | |
| run: function() { | |
| this.logKeys(); | |
| if(scene === 'platformer') { | |
| this.updatePlatformer(); | |
| } else if(scene === 'catcher') { | |
| this.updateCatcher(); | |
| } else if(scene === 'jumper') { | |
| this.updateJumper(); | |
| } | |
| this.display(); | |
| }, | |
| display: function() { | |
| noStroke(); | |
| fill(42, 139, 200); | |
| rect(this.x, this.y, this.width, this.height); | |
| }, | |
| logKeys: function() { | |
| if(keys[LEFT]) { | |
| this.xvel -= this.speed; | |
| } | |
| if(keys[RIGHT]){ | |
| this.xvel += this.speed; | |
| } | |
| if(this.xvel > this.maxSpeed){ | |
| this.xvel = this.maxSpeed; | |
| } | |
| if(this.xvel < -this.maxSpeed){ | |
| this.xvel = -this.maxSpeed; | |
| } | |
| if(keys[UP] && !this.falling && !this.swimming && !this.bouncing) { | |
| this.yvel = -this.jumpHeight; | |
| } else if(keys[UP] && this.swimming) { | |
| this.yvel -= 0.5; | |
| } else if(keys[UP] && this.bouncing && !this.falling) { | |
| this.yvel = -this.jumpHeight * 2; | |
| } | |
| }, | |
| updatePlatformer: function() { | |
| this.xvel /= 1.15; | |
| this.yvel += this.gravity; | |
| if(this.sinking) { | |
| this.xvel /= 2; | |
| this.yvel = 0.5; | |
| } | |
| this.x += this.xvel; | |
| this.collideWith(this.xvel, 0, platforms); | |
| this.collideWith(0, this.yvel, bouncers); | |
| this.falling = true; | |
| this.y += this.yvel; | |
| if(this.bouncing && this.collideWith(0, this.yvel, platforms)) { | |
| this.bouncing = false; | |
| } | |
| this.collideWith(0, this.yvel, platforms); | |
| this.collideWith(0, this.yvel, bouncers); | |
| this.swimming = false; | |
| this.sinking = false; | |
| }, | |
| updateCatcher: function() { | |
| this.xvel /= 1.15; | |
| this.yvel += this.gravity; | |
| this.x += this.xvel; | |
| this.x = constrain(this.x, 0, width - this.width); | |
| this.falling = true; | |
| this.y += this.yvel; | |
| if(this.y > 600 - this.height) { | |
| this.falling = false; | |
| this.yvel = 0; | |
| this.y = 600 - this.height; | |
| } | |
| }, | |
| updateJumper: function() { | |
| if(clicked) { | |
| this.yvel = -this.jumpHeight; | |
| } | |
| this.pressing = false; | |
| this.yvel += this.gravity; | |
| this.falling = true; | |
| this.y += this.yvel; | |
| if(this.yvel > this.maxFallSpeed){ | |
| this.yvel = this.maxFallSpeed; | |
| } | |
| }, | |
| collideWith: function(xv, yv, entities) { | |
| for (var i = 0; i < entities.length; i++) { | |
| var entity = entities[i]; | |
| if(this.y + this.height > entity.y && this.y < entity.y + entity.height && this.x + this.width > entity.x && this.x < entity.x + entity.width) { | |
| if(yv > 0) { // Bottom | |
| this.yvel = 0; | |
| this.falling = false; | |
| this.y = entity.y - this.height; | |
| } | |
| if(yv < 0) { // Top | |
| this.yvel = 0; | |
| this.falling = true; | |
| this.y = entity.y + entity.height; | |
| } | |
| if(xv > 0) { // Right | |
| this.xvel = 0; | |
| this.x = entity.x - this.width; | |
| } | |
| if(xv < 0) { // Left | |
| this.xvel = 0; | |
| this.x = entity.x + entity.width; | |
| } | |
| } | |
| } | |
| } | |
| }; | |
| /** Platformer **/ | |
| var Block = function(x, y, w, h) { | |
| this.x = x; | |
| this.y = y; | |
| this.width = w || 25; | |
| this.height = h || 25; | |
| }; | |
| Block.prototype.run = function() { | |
| if(this.update) { | |
| this.update(); | |
| } | |
| this.display(); | |
| }; | |
| Block.prototype.display = function() { | |
| noStroke(); | |
| fill(125); | |
| rect(this.x, this.y, this.width, this.height); | |
| }; | |
| var Platform = function(x, y) { | |
| Block.call(this, x, y); | |
| }; | |
| Platform.prototype = Object.create(Block.prototype); | |
| Platform.prototype.update = function() { | |
| }; | |
| var Lava = function(x, y) { | |
| Block.call(this, x, y); | |
| }; | |
| Lava.prototype = Object.create(Block.prototype); | |
| Lava.prototype.display = function() { | |
| imageMode(CORNER); | |
| image(images.lavaBlock, this.x, this.y, this.width, this.height); | |
| }; | |
| Lava.prototype.update = function() { | |
| if(rectToRectCollide(Player.x, Player.y, Player.width, Player.height, this.x, this.y, this.width, this.height)) { | |
| setShadows(); | |
| Player.alive = false; | |
| } | |
| }; | |
| var Water = function(x, y) { | |
| Block.call(this, x, y); | |
| }; | |
| Water.prototype = Object.create(Block.prototype); | |
| Water.prototype.display = function() { | |
| noStroke(); | |
| fill(0, 200, 255, 100); | |
| rect(this.x, this.y, this.width, this.height); | |
| }; | |
| Water.prototype.update = function() { | |
| if(rectToRectCollide(Player.x, Player.y, Player.width, Player.height, this.x, this.y, this.width, this.height)) { | |
| Player.swimming = true; | |
| } | |
| }; | |
| var Candy = function(x, y) { | |
| Block.call(this, x, y); | |
| this.type = candy[~~random(0, candy.length)]; | |
| }; | |
| Candy.prototype = Object.create(Block.prototype); | |
| Candy.prototype.display = function() { | |
| imageMode(CORNER); | |
| image(images[this.type], this.x, this.y, this.width, this.height); | |
| }; | |
| Candy.prototype.update = function() { | |
| if(rectToRectCollide(Player.x, Player.y, Player.width, Player.height, this.x, this.y, this.width, this.height)) { | |
| Player.candy++; | |
| candies.splice(candies.indexOf(this), 1); | |
| } | |
| }; | |
| var Quicksand = function(x, y) { | |
| Block.call(this, x, y); | |
| }; | |
| Quicksand.prototype = Object.create(Block.prototype); | |
| Quicksand.prototype.display = function() { | |
| noStroke(); | |
| fill(110, 97, 78); | |
| rect(this.x, this.y, this.width, this.height); | |
| }; | |
| Quicksand.prototype.update = function() { | |
| if(rectToRectCollide(Player.x, Player.y, Player.width, Player.height, this.x, this.y, this.width, this.height)) { | |
| Player.sinking = true; | |
| } | |
| }; | |
| var Bouncer = function(x, y) { | |
| Block.call(this, x, y + 25 - 25 / 6, 25, 25 / 6); | |
| }; | |
| Bouncer.prototype = Object.create(Block.prototype); | |
| Bouncer.prototype.display = function() { | |
| noStroke(); | |
| fill(27, 235, 0); | |
| rect(this.x, this.y, this.width, this.height); | |
| }; | |
| Bouncer.prototype.update = function() { | |
| if(rectToRectCollide(Player.x, Player.y, Player.width, Player.height, this.x, this.y, this.width, this.height)) { | |
| Player.bouncing = true; | |
| } | |
| }; | |
| var End = function(x, y) { | |
| Block.call(this, x, y); | |
| }; | |
| End.prototype = Object.create(Block.prototype); | |
| End.prototype.display = function() { | |
| imageMode(CORNER); | |
| image(images.chocolateBar, this.x, this.y, this.width, this.height); | |
| }; | |
| End.prototype.update = function() { | |
| if(rectToRectCollide(Player.x, Player.y, Player.width, Player.height, this.x, this.y, this.width, this.height)) { | |
| level++; | |
| resetLevels(); | |
| levelGen(); | |
| } | |
| }; | |
| var levels = [ | |
| [ | |
| [1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1], | |
| [1, 0, 0, 1, 1, 2, 1, 1, 1, 2, 1, 1, 0, 0, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1], | |
| [1, 0, 0, 1, 2, 2, 2, 0, 1, 2, 1, 0, 0, 0, 1, 2, 0, 2, 1, 0, 1, 2, 1, 1], | |
| [1, 0, 0, 0, 2, 0, 2, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 2, 0, 2, 1], | |
| [1, 0, 0, 0, 2, 0, 2, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 1], | |
| [1, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], | |
| [1, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], | |
| [1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], | |
| [1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], | |
| [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], | |
| [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], | |
| [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], | |
| [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], | |
| [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], | |
| [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], | |
| [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], | |
| [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], | |
| [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], | |
| [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], | |
| [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], | |
| [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], | |
| [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], | |
| [1, 0, 0, 9, 0, 6, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 1], | |
| [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] | |
| ], | |
| [ | |
| [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], | |
| [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], | |
| [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], | |
| [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], | |
| [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 1], | |
| [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 1, 1, 0, 0, 1], | |
| [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 1], | |
| [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 1], | |
| [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 1], | |
| [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 1, 0, 0, 0, 0, 0, 1], | |
| [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 1], | |
| [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 1], | |
| [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 1], | |
| [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1], | |
| [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], | |
| [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], | |
| [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], | |
| [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], | |
| [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], | |
| [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], | |
| [1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], | |
| [1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], | |
| [1, 0, 9, 0, 1, 1, 1, 1, 1, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], | |
| [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] | |
| ], | |
| [ | |
| [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 1], | |
| [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1], | |
| [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], | |
| [1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], | |
| [1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], | |
| [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], | |
| [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], | |
| [1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], | |
| [1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], | |
| [1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], | |
| [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1], | |
| [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1], | |
| [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], | |
| [2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2], | |
| [2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2], | |
| [2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2], | |
| [2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2], | |
| [2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 2], | |
| [2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 2], | |
| [2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2], | |
| [2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2], | |
| [2, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 2], | |
| [2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2], | |
| [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] | |
| ], | |
| [ | |
| [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], | |
| [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 1], | |
| [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 1], | |
| [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 4, 4, 8, 1], | |
| [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 1, 1, 1, 1], | |
| [1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 1], | |
| [1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 1], | |
| [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 1], | |
| [1, 2, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 1], | |
| [1, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 1], | |
| [1, 2, 2, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 4, 1], | |
| [1, 2, 2, 2, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 1], | |
| [1, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 2, 1], | |
| [1, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 3, 3, 0, 2, 2, 2, 1], | |
| [1, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 2, 2, 2, 1], | |
| [1, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], | |
| [1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1], | |
| [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], | |
| [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], | |
| [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], | |
| [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], | |
| [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1], | |
| [1, 0, 9, 0, 0, 0, 0, 0, 0, 1, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 4, 1], | |
| [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1] | |
| ] | |
| ]; | |
| levelGen = function() { | |
| for(var y = 0; y < levels[level - 1].length; y++) { | |
| for(var x = 0; x < levels[level - 1][y].length; x++) { | |
| switch(levels[level - 1][y][x]) { | |
| case 1: | |
| platforms.push(new Platform(x * 25, y * 25)); | |
| break; | |
| case 2: | |
| lavas.push(new Lava(x * 25, y * 25)); | |
| break; | |
| case 3: | |
| waters.push(new Water(x * 25, y * 25)); | |
| break; | |
| case 4: | |
| candies.push(new Candy(x * 25, y * 25)); | |
| break; | |
| case 5: | |
| break; | |
| case 6: | |
| quicksands.push(new Quicksand(x * 25, y * 25)); | |
| break; | |
| case 7: | |
| bouncers.push(new Bouncer(x * 25, y * 25)); | |
| break; | |
| case 8: | |
| ends.push(new End(x * 25, y * 25)); | |
| break; | |
| case 9: | |
| Player.x = x * 25; | |
| Player.y = y * 25; | |
| break; | |
| } | |
| } | |
| } | |
| }; | |
| /** Catcher **/ | |
| var Item = function(x, y, width, height) { | |
| this.x = x; | |
| this.y = y; | |
| this.width = width; | |
| this.height = height; | |
| this.xvel = 0; | |
| this.yvel = random(1, 3); | |
| }; | |
| Item.prototype.run = function() { | |
| if(this.update) { | |
| this.update(); | |
| } | |
| if(this.display) { | |
| this.display(); | |
| } | |
| }; | |
| var Candy2 = function(x, y, d) { | |
| Item.call(this, x, y, d, d); | |
| this.d = d; | |
| this.type = candy[~~random(0, candy.length)]; | |
| }; | |
| Candy2.prototype = Object.create(Item.prototype); | |
| Candy2.prototype.display = function() { | |
| imageMode(CORNER); | |
| image(images[this.type], this.x, this.y, this.d, this.d); | |
| }; | |
| Candy2.prototype.update = function() { | |
| this.xvel /= 1.01; | |
| this.x += this.xvel; | |
| this.y += this.yvel; | |
| if(this.y > height) { | |
| candies.splice(candies.indexOf(this), 1); | |
| } | |
| if(circleToRectCollide(Player.x, Player.y, Player.width, Player.height, this.x, this.y, this.d)) { | |
| Player.candy++; | |
| candies.splice(candies.indexOf(this), 1); | |
| } | |
| }; | |
| var Bomb = function(x, y, d) { | |
| Item.call(this, x, y, d, d); | |
| this.d = d; | |
| }; | |
| Bomb.prototype = Object.create(Item.prototype); | |
| Bomb.prototype.display = function() { | |
| noStroke(); | |
| fill(75); | |
| ellipse(this.x, this.y, this.d, this.d); | |
| }; | |
| Bomb.prototype.update = function() { | |
| this.xvel /= 1.01; | |
| this.x += this.xvel; | |
| this.y += this.yvel; | |
| if(this.y > height) { | |
| Player.lives -= 1; | |
| bombs.splice(bombs.indexOf(this), 1); | |
| } | |
| }; | |
| var Boost = function(x, y, d) { | |
| Item.call(this, x, y, d, d); | |
| this.d = d; | |
| }; | |
| Boost.prototype = Object.create(Item.prototype); | |
| Boost.prototype.display = function() { | |
| noStroke(); | |
| fill(175, 175, 42); | |
| ellipse(this.x, this.y, this.d, this.d); | |
| }; | |
| Boost.prototype.update = function() { | |
| this.xvel /= 1.01; | |
| this.x += this.xvel; | |
| this.y += this.yvel; | |
| if(this.y > height) { | |
| boosts.splice(boosts.indexOf(this), 1); | |
| } | |
| }; | |
| /** Jumper **/ | |
| var Item = function(x, y, w, h) { | |
| this.x = x; | |
| this.y = y; | |
| this.w = w; | |
| this.h = h; | |
| this.xvel = 0; | |
| this.yvel = random(1, 3); | |
| }; | |
| Item.prototype.run = function() { | |
| if(this.update) { | |
| this.update(); | |
| } | |
| if(this.display) { | |
| this.display(); | |
| } | |
| }; | |
| var Candy3 = function(x, y, d) { | |
| Item.call(this, x, y, d, d); | |
| this.xvel = this.x > 600 ? -random(1, 3) : random(1, 3); | |
| this.yvel = 0; | |
| this.d = d; | |
| }; | |
| Candy3.prototype = Object.create(Item.prototype); | |
| Candy3.prototype.display = function() { | |
| pushMatrix(); | |
| translate(this.x, this.y); | |
| rotate(frameCount + this.x); | |
| noStroke(); | |
| fill(42, 150, 42); | |
| triangle(0 - this.d / 1.5, 0 - this.d / 3, 0 - this.d / 1.5, 0 + this.d / 3, 0, 0); | |
| triangle(0 + this.d / 1.5, 0 - this.d / 3, 0 + this.d / 1.5, 0 + this.d / 3, 0, 0); | |
| fill(42, 175, 42); | |
| ellipse(0, 0, this.d, this.d); | |
| popMatrix(); | |
| }; | |
| Candy3.prototype.update = function() { | |
| this.x += this.xvel; | |
| this.y += this.yvel; | |
| if(circleToRectCollide(Player.x, Player.y, Player.width, Player.height, this.x, this.y, this.d / 2)) { | |
| Player.candy++; | |
| candies.splice(candies.indexOf(this), 1); | |
| } | |
| }; | |
| /** Set Game Variables **/ | |
| var setPlatformer = function() { | |
| Player.width = 25; | |
| Player.height = 25; | |
| Player.jumpHeight = 8; | |
| resetLevels(); | |
| levelGen(); | |
| }; | |
| var setCatcher = function() { | |
| Player.width = 50; | |
| Player.height = 75; | |
| Player.jumpHeight = 10; | |
| resetLevels(); | |
| }; | |
| var setJumper = function() { | |
| Player.width = 50; | |
| Player.height = 75; | |
| Player.jumpHeight = 7; | |
| Player.gravity = 0.3; | |
| Player.x = 275; | |
| Player.maxFallSpeed = 10; | |
| resetLevels(); | |
| }; | |
| /** House Party **/ | |
| var Avatar = function(name, x, z) { | |
| this.name = name; | |
| this.x = random(200, 1000); | |
| this.z = random(15, 35); | |
| this.xDestination = this.x; | |
| this.zDestination = this.z; | |
| this.timer = random(100); | |
| this.freq = random(30, 200); | |
| }; | |
| Avatar.prototype.run = function() { | |
| this.update(); | |
| this.display(); | |
| }; | |
| Avatar.prototype.display = function() { | |
| imageMode(CENTER); | |
| pushMatrix(); | |
| translate(this.x, 375 + this.z); | |
| scale(this.z / 30); | |
| image(getImage("avatars/" + this.name), 0, 100); | |
| popMatrix(); | |
| }; | |
| Avatar.prototype.update = function() { | |
| this.timer++; | |
| if (this.timer > this.freq) { | |
| this.xDestination = this.x + random(-150, 150); | |
| this.zDestination = this.z + random(-5, 5); | |
| this.timer = 0; | |
| } | |
| this.x += (this.xDestination - this.x) / 20; | |
| this.z += (this.zDestination - this.z) / 20; | |
| this.z = constrain(this.z, 15, 50); | |
| this.x = constrain(this.x, 200, 1200); | |
| }; | |
| var houseParty = { | |
| x: 0, | |
| door: function(x, name, callback) { | |
| imageMode(CENTER); | |
| image(images.door, x, 382); | |
| textAlign(CENTER, CENTER); | |
| textFont(createFont('Avenir Bold'), 14); | |
| fill(110, 58, 21); | |
| text(name, x, 280); | |
| fill(166, 101, 58); | |
| text(name, x, 278); | |
| if(mouseX > x + this.x - 53 && mouseY > 302 && mouseX < x + this.x + 53 && mouseY < 462) { | |
| if(mouseIsPressed && callback) { | |
| callback(); | |
| } | |
| } | |
| }, | |
| medal: function(x, y, sz, color, r) { | |
| noStroke(); | |
| pushMatrix(); | |
| translate(x, y); | |
| rotate(r); | |
| scale(sz / 300); | |
| fill(color); | |
| ellipse(-7, -4, 402, 400); | |
| (fill)(0, 50); | |
| triangle(-24, -49, 16, 41, -86, 20); | |
| (fill)(0, 30); | |
| triangle(-24, -49, -97, -75, -86, 20); | |
| fill(79, 79, 79, 10); | |
| triangle(-24, -49, -97, -75, -59, -114); | |
| fill(255, 255, 255, 20); | |
| triangle(-22, -47, 9, -86, -59, -114); | |
| (fill)(0, 30); | |
| triangle(-23, -45, 6, -84, 68, -48); | |
| fill(43, 165, 218); | |
| fill(255, 255, 255, 10); | |
| triangle(-19, -44, 16, 41, 66, -48); | |
| fill(242, 223, 138, 30); | |
| triangle(106, 45, 16, 41, 66, -51); | |
| fill(34, 190, 212); | |
| fill(255, 255, 255, 30); | |
| triangle(-131, -165, -97, -73, -56, -114); | |
| fill(255, 255, 255, 100); | |
| triangle(-129, -163, -35, -203, -59, -114); | |
| fill(255, 255, 255, 50); | |
| triangle(-129, -163, -35, -203, -85, -189); | |
| fill(255, 255, 255, 150); | |
| triangle(18, -203, -35, -203, -59, -114); | |
| fill(255, 255, 255, 30); | |
| triangle(18, -203, 29, -148, -59, -114); | |
| fill(255, 255, 255, 150); | |
| triangle(6, -84, 29, -148, -59, -114); | |
| fill(255, 255, 255, 100); | |
| triangle(6, -84, 29, -148, 60, -108); | |
| fill(255, 255, 255, 50); | |
| triangle(69, -191, 29, -148, 60, -108); | |
| (fill)(0, 10); | |
| triangle(69, -191, 29, -148, 18, -204); | |
| fill(255, 255, 255, 50); | |
| triangle(6, -84, 66, -49, 60, -108); | |
| (fill)(0, 90); | |
| triangle(-56, 87, 15, 41, -86, 20); | |
| (fill)(0, 40); | |
| triangle(-56, 87, 15, 41, 30, 100); | |
| (fill)(0, 70); | |
| triangle(105, 44, 15, 41, 30, 100); | |
| (fill)(0, 150); | |
| triangle(105, 44, 115, 158, 30, 100); | |
| (fill)(0, 120); | |
| triangle(105, 44, 115, 158, 179, 75); | |
| (fill)(0, 90); | |
| triangle(105, 44, 194, 23, 179, 75); | |
| (fill)(0, 60); | |
| triangle(105, 44, 194, 23, 67, -48); | |
| (fill)(0, 80); | |
| triangle(141, -33, 194, 23, 67, -48); | |
| (fill)(0, 20); | |
| triangle(141, -33, 59, -109, 67, -48); | |
| fill(255, 255, 255, 20); | |
| triangle(109, -169, 59, -109, 69, -191); | |
| (fill)(0, 10); | |
| triangle(109, -169, 59, -109, 154, -128); | |
| fill(255, 255, 255, 30); | |
| triangle(113, -58, 59, -109, 154, -128); | |
| (fill)(0, 30); | |
| triangle(113, -58, 178, -82, 154, -128); | |
| fill(255, 255, 255, 20); | |
| triangle(113, -58, 178, -82, 142, -32); | |
| (fill)(0, 50); | |
| triangle(194, -31, 178, -82, 142, -32); | |
| (fill)(0, 100); | |
| triangle(141, -33, 194, 23, 194, -31); | |
| (fill)(0, 150); | |
| triangle(156, 115, 115, 158, 179, 75); | |
| (fill)(0, 170); | |
| triangle(71, 183, 115, 158, 30, 100); | |
| (fill)(0, 120); | |
| triangle(71, 183, 3, 147, 30, 100); | |
| (fill)(0, 80); | |
| triangle(-56, 87, 3, 147, 30, 100); | |
| (fill)(0, 130); | |
| triangle(-56, 87, 3, 147, -32, 196); | |
| (fill)(0, 150); | |
| triangle(-56, 87, -132, 157, -32, 196); | |
| (fill)(0, 140); | |
| triangle(-56, 87, -132, 157, -167, 121); | |
| (fill)(0, 70); | |
| triangle(-56, 87, -134, 42, -167, 121); | |
| (fill)(0, 50); | |
| triangle(-192, 78, -134, 42, -167, 121); | |
| (fill)(0, 50); | |
| triangle(-56, 87, -134, 42, -85, 21); | |
| fill(255, 255, 255, 30); | |
| triangle(-118, -23, -134, 42, -85, 21); | |
| fill(255, 255, 255, 70); | |
| triangle(-118, -23, -134, 42, -208, 23); | |
| (fill)(0, 30); | |
| triangle(-192, 78, -134, 42, -208, 23); | |
| (fill)(0, 20); | |
| triangle(-118, -23, -97, -74, -85, 21); | |
| (fill)(0, 50); | |
| triangle(-118, -23, -97, -74, -169, -125); | |
| fill(255, 255, 255, 60); | |
| triangle(-130, -163, -97, -74, -169, -125); | |
| fill(255, 255, 255, 150); | |
| triangle(-118, -23, -194, -82, -169, -124); | |
| fill(255, 255, 255, 100); | |
| triangle(-118, -23, -194, -82, -207, -30); | |
| fill(255, 255, 255, 80); | |
| triangle(-118, -23, -207, 23, -207, -30); | |
| (fill)(0, 180); | |
| triangle(-87, 182, -132, 157, -32, 196); | |
| (fill)(0, 180); | |
| triangle(70, 182, 3, 147, -32, 196); | |
| (fill)(0, 180); | |
| triangle(70, 182, 23, 196, -32, 196); | |
| popMatrix(); | |
| }, | |
| winstonBall: function(x, y, sz, r) { | |
| pushMatrix(); | |
| translate(x, y); | |
| rotate(r); | |
| scale(sz / 50); | |
| this.medal(0, 0, 300, color(230, 255, 0)); | |
| this.medal(-66, -80, 37, color(46, 48, 28), 153); | |
| this.medal(128, -90, 37, color(46, 48, 28), 153); | |
| this.medal(71, 35, 126, color(219, 28, 44), 186); | |
| popMatrix(); | |
| }, | |
| avatars: [ | |
| new Avatar("mr-pants"), | |
| new Avatar("mr-pink"), | |
| new Avatar("orange-juice-squid"), | |
| new Avatar("old-spice-man"), | |
| new Avatar("purple-pi"), | |
| new Avatar("spunky-sam"), | |
| new Avatar("duskpin-sapling"), | |
| new Avatar("duskpin-ultimate"), | |
| new Avatar("marcimus"), | |
| new Avatar("robot_female_1"), | |
| new Avatar("robot_female_2"), | |
| new Avatar("robot_female_3"), | |
| new Avatar("robot_male_1"), | |
| new Avatar("robot_male_2"), | |
| new Avatar("robot_male_3"), | |
| new Avatar("starky-sapling"), | |
| new Avatar("starky-ultimate"), | |
| new Avatar("aqualine-tree"), | |
| ], | |
| run: function() { | |
| this.update(); | |
| this.display(); | |
| }, | |
| display: function() { | |
| pushMatrix(); | |
| translate(this.x, 0); | |
| strokeWeight(2); | |
| for (var i = 0; i < 140; i++) { | |
| stroke(lerpColor(color(99, 59, 34), color(54, 28, 10), i / 140)); | |
| line(i, i, 1300 - i, i); | |
| } | |
| for (var i = 0; i < 142; i++) { | |
| stroke(lerpColor(color(120, 39, 70), color(36, 4, 35), i / 140)); | |
| line(i, height - i, width - i + 700, height - i); | |
| } | |
| noFill(); | |
| strokeWeight(5); | |
| (stroke)(0, 30); | |
| for (var j = 459; j < 595; j += 21) { | |
| beginShape(); | |
| for (var i = 0; i < 1216; i += 50) { | |
| vertex(i, j + ((j / 15) - 20)); | |
| vertex(i + 25, j); | |
| } | |
| endShape(); | |
| } | |
| strokeWeight(2); | |
| for (var i = 0; i < 140; i++) { | |
| stroke(lerpColor(color(79, 39, 13), color(56, 32, 16), i / 140)); | |
| line(i, height - i, i, i); | |
| } | |
| for (var i = 0; i < 140; i++) { | |
| stroke(lerpColor(color(79, 39, 13), color(46, 22, 6), i / 140)); | |
| line(700 + width - i, height - i, 700 + width - i, i); | |
| } | |
| noStroke(); | |
| (fill)(0, 50); | |
| rect(138, 140, 4, 322); | |
| for (var i = -47; i < 129; i += 50) { | |
| (fill)(0, (i / 10) + 60); | |
| quad(i, i, i, 614 - (i * 1.15), i + 23, 583 - (i * 1.15), i + 23, 24 + i); | |
| quad(i - 14, -16 + i, i - 14, 623 - (i * 1.15), i - 9, 615 - (i * 1.15), i - 9, -9 + i); | |
| } | |
| pushMatrix(); | |
| translate(1303, 0); | |
| scale(-1, 1); | |
| for (var i = -24; i < 129; i += 50) { | |
| (fill)(0, (i / 10) + 60); | |
| quad(i, i, i, 614 - (i * 1.15), i + 23, 583 - (i * 1.15), i + 23, 24 + i); | |
| quad(i - 14, -16 + i, i - 14, 623 - (i * 1.15), i - 9, 615 - (i * 1.15), i - 9, -9 + i); | |
| } | |
| popMatrix(); | |
| for (var i = 16; i < 1004; i += 50) { | |
| (fill)(0, 30); | |
| rect(140 + i, 140, 7, 312); | |
| (fill)(0, 50); | |
| rect(152 + i, 140, 23, 312); | |
| } | |
| noFill(); | |
| stroke(59, 28, 8); | |
| strokeWeight(10); | |
| quad(-39, 630, 142, 457, 1160, 457, 1330, 630); | |
| quad(-39, -30, 142, 143, 1160, 143, 1330, -30); | |
| (stroke)(0, 100); | |
| strokeWeight(3); | |
| quad(-39, 633, 142, 460, 1160, 460, 1330, 630); | |
| this.door(215, 'CANDY CATCH', function() { | |
| setShadows(); | |
| scene = 'catcher'; | |
| setCatcher(); | |
| }); | |
| this.door(415, 'SPOOKY CLIMB'); | |
| this.door(615, 'CHOCOTILES', function() { | |
| setShadows(); | |
| scene = 'platformer'; | |
| setPlatformer(); | |
| }); | |
| this.door(815, 'CANDY JUMP', function() { | |
| setShadows(); | |
| scene = 'jumper'; | |
| setJumper(); | |
| }); | |
| this.door(1015, 'SWEET DREAMS'); | |
| noFill(); | |
| stroke(61, 61, 61); | |
| strokeWeight(6); | |
| bezier(525, 260 + sin(frameCount) * 10, 514, 175, 537, 164, 525, 100); | |
| this.winstonBall(525, 260 + sin(frameCount) * 20, 8, sin(frameCount / 3) * 550); | |
| this.avatars.sort(function(a, b) { | |
| return a.z - b.z; | |
| }); | |
| for (var i = 0; i < this.avatars.length; i++) { | |
| this.avatars[i].run(); | |
| } | |
| popMatrix(); | |
| }, | |
| update: function() { | |
| if(keys[LEFT] || keys[RIGHT]) { | |
| if (keys[LEFT] && this.x < 0) { | |
| this.x += 4; | |
| } | |
| if (keys[RIGHT] && this.x > -700) { | |
| this.x -= 4; | |
| } | |
| } else { | |
| if (mouseX < 100 && this.x < 0) { | |
| this.x += 4; | |
| } | |
| if (mouseX > 500 && this.x > -700) { | |
| this.x -= 4; | |
| } | |
| } | |
| } | |
| }; | |
| /** Overlay **/ | |
| var overlay = function() { | |
| imageMode(CENTER); | |
| image(images.mint, 15, 15, 25, 25); | |
| textFont(createFont('Trebuchet MS Bold'), 20); | |
| textAlign(LEFT, CENTER); | |
| fill(0); | |
| text(Player.candy, 30, 15); | |
| }; | |
| /** Draw **/ | |
| var draw = function() { | |
| switch(scene) { | |
| default:{ | |
| background(245); | |
| }break; | |
| case 'menu':{ | |
| background(0); | |
| pushMatrix(); | |
| translate(random(-0.5, 0.5), random(-0.5, 0.5)); | |
| image(images.menuBG, 0, 0); | |
| textAlign(CENTER, CENTER); | |
| textFont(createFont('Avenir Bold'), 30); | |
| fill(255, 255, 255, 50); | |
| text('c l i c k t o b e g i n', 300 + sin(frameCount * 2) * 20, 550); | |
| if(mouseIsPressed && !clicked) { | |
| setShadows(); | |
| scene = 'houseparty'; | |
| } | |
| popMatrix(); | |
| }break; | |
| case 'shop':{ | |
| background(101, 67, 33); | |
| }break; | |
| case 'houseparty':{ | |
| background(46, 22, 6); | |
| houseParty.run(); | |
| }break; | |
| case 'platformer':{ | |
| if(!Player.alive) { | |
| background(200, 42, 42); | |
| textAlign(CENTER, CENTER); | |
| textFont(createFont('Trebuchet MS Bold'), 100); | |
| fill(245); | |
| text('You Died!', 300, 300); | |
| } else { | |
| background(255, 228, 196); | |
| imageMode(CORNER); | |
| image(images.caveBG, 0, 0); | |
| platforms.forEach(function(platform) { | |
| platform.run(); | |
| }); | |
| ends.forEach(function(end) { | |
| end.run(); | |
| }); | |
| waters.forEach(function(water) { | |
| water.run(); | |
| }); | |
| lavas.forEach(function(lava) { | |
| lava.run(); | |
| }); | |
| quicksands.forEach(function(quicksand) { | |
| quicksand.run(); | |
| }); | |
| bouncers.forEach(function(bouncer) { | |
| bouncer.run(); | |
| }); | |
| for(var i = candies.length; i > 0; i--) { | |
| candies[i - 1].run(); | |
| } | |
| Player.run(); | |
| overlay(); | |
| } | |
| }break; | |
| case 'catcher':{ | |
| if(frameCount%75 === 0) { | |
| var c = ~~random(1, 3) === 1 ? candies.push(new Candy2(random(0, 600), 0, random(20, 50))) : bombs.push(new Bomb(random(0, 600), 0, random(20, 50))); | |
| } | |
| background(200); | |
| for(var i = candies.length; i > 0; i--) { | |
| candies[i - 1].run(); | |
| } | |
| for(var i = bombs.length; i > 0; i--) { | |
| bombs[i - 1].run(); | |
| } | |
| Player.run(); | |
| overlay(); | |
| }break; | |
| case 'jumper':{ | |
| background(200); | |
| if(frameCount%30 === 0) { | |
| var side = ~~random(1, 3) === 1 ? candies.push(new Candy3(-50, random(0, 600), random(20, 50))) : candies.push(new Candy3(650, random(0, 600), random(20, 50))); | |
| } | |
| for(var i = candies.length; i > 0; i--) { | |
| candies[i - 1].run(); | |
| } | |
| Player.run(); | |
| overlay(); | |
| }break; | |
| } | |
| if(255 - shadow >= 0) { | |
| noStroke(); | |
| (fill)(0, 255 - shadow); | |
| rect(0, 0, width, height); | |
| shadow += 2; | |
| } | |
| }; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment