From 43b7ccfd0b29ce7095b362d7b90dea8d74a21a27 Mon Sep 17 00:00:00 2001 From: RedEnchilada Date: Sun, 15 May 2016 13:17:54 -0500 Subject: [PATCH] Add a boss to flail at you menacingly --- assets/sprites/boss.png | Bin 0 -> 6771 bytes assets/sprites/tentacle.png | Bin 0 -> 341 bytes data/LevelDatabase.js | 5 ++ level/Boss.js | 135 ++++++++++++++++++++++++++++++++++++ level/Dolphin.js | 15 ++++ level/Level.js | 21 ++++++ 6 files changed, 176 insertions(+) create mode 100644 assets/sprites/boss.png create mode 100644 assets/sprites/tentacle.png create mode 100644 level/Boss.js diff --git a/assets/sprites/boss.png b/assets/sprites/boss.png new file mode 100644 index 0000000000000000000000000000000000000000..7c3be7599ad7925d599f061f17f475410d20d052 GIT binary patch literal 6771 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 V=%7Q!t}_4t002ovPDHLkV1nlAtP=nL literal 0 HcmV?d00001 diff --git a/assets/sprites/tentacle.png b/assets/sprites/tentacle.png new file mode 100644 index 0000000000000000000000000000000000000000..2f89a3ce5bb73966106da09692ff25817ff0276c GIT binary patch literal 341 zcmeAS@N?(olHy`uVBq!ia0vp^k|4~&3?$8t&j{XE)7O>#0V_YNgqqB` zkKRBb+02lL66gHf+|;}hAeVu`xhOTUBsE2$JhLQ2!QIn0AVn{g9VouQ)5S4F;|ocwFcDT$scv6rr$HQbDNTJ>$3drT5vi{xN?1a^RSN;_fFt#??AYuQEoTS-Q1z zVes!+hg4hj_$TcA)=(qk_f$>$ZPb$aIWBpH{IZ)Fix#KMF>OD6RpI`Vt1pkPdLnT* zQClp)VAGrz>F%bS`49J}$Yz|FVyD19Wy+)z-p`Z8PN#0R=9@S3@6G?N-_KnCvup#y cg`L}T>zX-jX5N-bj{ 34) { + one.momentum.x += xdist/16; + one.momentum.y += ydist/16; + one.momentum.z += zdist/16; + two.momentum.x -= xdist/16; + two.momentum.y -= ydist/16; + two.momentum.z -= zdist/16; + } + + one.position.x += one.momentum.x; + one.position.y += one.momentum.y; + one.position.z += one.momentum.z; + + one.momentum.x *= 0.9; + one.momentum.y *= 0.9; + one.momentum.z *= 0.9; + one.momentum.z += 0.1; + } + } + + boss.think = function() { + var momx = dolphin.position.x + Math.cos(dolphin.angle) * 250 - boss.position.x; + var momy = dolphin.position.y + Math.sin(dolphin.angle) * 250 - boss.position.y; + var momz = dolphin.position.z - boss.position.z; + momx /= 16; + momy /= 16; + momz /= 16; + + boss.position.x += momx; + boss.position.y += momy; + boss.position.z += momz; + + var offset = level.ticCount; + + targets.forEach(function(t) { + offset += 90; + t.stick--; + if (t.stick < -80) { + t.stick = Math.floor(Math.random() * 100 + 160); + } else if (t.stick == 0) { + var xoffs = -Math.sin(dolphin.angle) * Math.cos(dolphin.activeSprite.rotation) * 70; + var yoffs = Math.cos(dolphin.angle) * Math.cos(dolphin.activeSprite.rotation) * 70; + var zoffs = Math.sin(dolphin.activeSprite.rotation) * 70; + + t.x = boss.position.x + (dolphin.position.x + xoffs - boss.position.x) * 2; + t.y = boss.position.y + (dolphin.position.y + yoffs - boss.position.y) * 2; + t.z = boss.position.z + (dolphin.position.z + zoffs - boss.position.z) * 2; + } else if (t.stick > 0) { + momx = boss.position.x + Math.cos(offset*Math.PI/180) * 150 - t.x; + momy = boss.position.y + Math.sin(offset*Math.PI/180) * 150 - t.y; + momz = boss.position.z - t.z; + + t.x += momx/20; + t.y += momy/20; + t.z += momz/20; + } + }); + + for (var i = 0; i < 4; i++) { + positionArm(arms[i], targets[i]); + } + } + + return boss; +}; \ No newline at end of file diff --git a/level/Dolphin.js b/level/Dolphin.js index ff18fc2..972e597 100644 --- a/level/Dolphin.js +++ b/level/Dolphin.js @@ -64,6 +64,21 @@ Dolphin = function(level, axis, position, z) { collectible.think = collectible.attract; collectible.attractTarget = dolphin; } + + if (dolphin.colliding("tentacle")) { + dolphin.momentum.x *= -1.3; + dolphin.momentum.y *= -1.3; + + while (dolphin.momentum.x * dolphin.momentum.x + dolphin.momentum.y * dolphin.momentum.y > 1000) { + dolphin.momentum.x *= 0.99; + dolphin.momentum.y *= 0.99; + } + + while (dolphin.colliding("tentacle")) { + axisMove(); + vMove(); + } + } }; dolphin.fliptimer = 0; diff --git a/level/Level.js b/level/Level.js index 165aaaa..014fc39 100644 --- a/level/Level.js +++ b/level/Level.js @@ -39,6 +39,9 @@ Level = function(levelName) { tint.scale.set(500/8, 280/8); } + // Boss + var boss; + // Wipe in/out graphic var wipe = level.wipe = new PIXI.Graphics(); wipe.beginFill(0x000000); @@ -139,6 +142,24 @@ Level = function(levelName) { crystal.save = true; placeEntityInGrid(crystal); } + + // Boss. + if (level.map.boss) { + boss = Boss( + level, + dolphin.position.x + Math.cos(dolphin.angle) * 250, + dolphin.position.y + Math.sin(dolphin.angle) * 250, + dolphin.position.z, + level.map.boss, + dolphin + ); + placeEntityInGrid(boss); + boss.arms.forEach(function(arm) { + arm.forEach(function(piece) { + placeEntityInGrid(piece); + }); + }); + } } level.think = function() {