User prompt
Oyuna günceleme getir
User prompt
Please fix the bug: 'Error: Invalid value. Only literals or 1-level deep objects/arrays containing literals are allowed.' in or related to this line: 'storage.leaderboard = leaderboard;' Line Number: 713 ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
Make this game as beautiful as GTA 2 and add a table showing the scores of the players to the login screen. ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
speed up the scorpion a little bit and make its appearance more beautiful ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
This thing is easter egg in the game if you click on the heart bars 10 times, 31 thousandlet's have points
User prompt
Make the model of the scorpion yourself
User prompt
Let there be a scorpion, a slow scorpion, this scorpion will try to burst the balloon before us.Let there be a scorpion, a slow scorpion, this scorpion will try to burst the balloon before us. ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
forget the backlight
User prompt
ışıkları yavaşlat ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Develop the game yourself and add more systems and make the visuals yourself ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
büyük start yazısı
User prompt
oyun başlamıyor start yazısı koy
User prompt
make start screen
User prompt
If 5 balloons appear on the screen, you lose and a sign that says your best score ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
the game is losing health by itself, fix it, slow it down
Code edit (1 edits merged)
Please save this source code
User prompt
Bubble Pop Symphony
Initial prompt
Design a simple game and make it unique
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); var storage = LK.import("@upit/storage.v1"); /**** * Classes ****/ var BeatRing = Container.expand(function () { var self = Container.call(this); var ringGraphics = self.attachAsset('beatRing', { anchorX: 0.5, anchorY: 0.5 }); ringGraphics.alpha = 0.3; ringGraphics.scaleX = 0.1; ringGraphics.scaleY = 0.1; self.animate = function () { tween(ringGraphics, { scaleX: 1.5, scaleY: 1.5, alpha: 0 }, { duration: 1000, easing: tween.easeOut, onFinish: function onFinish() { self.destroy(); } }); }; return self; }); var Bubble = Container.expand(function (color, isGolden) { var self = Container.call(this); var bubbleAsset = isGolden ? 'goldenBubble' : 'bubble'; var bubbleGraphics = self.attachAsset(bubbleAsset, { anchorX: 0.5, anchorY: 0.5 }); if (!isGolden) { bubbleGraphics.tint = color; } self.isGolden = isGolden || false; self.color = color; self.noteIndex = Math.floor(Math.random() * 4); self.spawned = false; self.pulseTween = null; self.lastPulseTime = 0; self.floatTween = null; // Add floating motion self.startFloat = function () { if (self.floatTween) { tween.stop(self, { y: true }); } var floatAmount = 20 + Math.random() * 30; var floatDuration = 2000 + Math.random() * 1000; self.floatTween = tween(self, { y: self.y - floatAmount }, { duration: floatDuration, easing: tween.easeInOut, onFinish: function onFinish() { tween(self, { y: self.y + floatAmount }, { duration: floatDuration, easing: tween.easeInOut, onFinish: function onFinish() { if (!self.destroyed) { self.startFloat(); } } }); } }); }; // Enhanced pulsing effect with color changes self.startPulse = function () { self.lastPulseTime = LK.ticks; if (self.pulseTween) { tween.stop(bubbleGraphics, { scaleX: true, scaleY: true }); } // Add glow effect on pulse var originalTint = bubbleGraphics.tint; tween(bubbleGraphics, { tint: 0xFFFFFF }, { duration: 150, onFinish: function onFinish() { tween(bubbleGraphics, { tint: originalTint }, { duration: 150 }); } }); self.pulseTween = tween(bubbleGraphics, { scaleX: 1.3, scaleY: 1.3 }, { duration: 200, easing: tween.easeOut, onFinish: function onFinish() { tween(bubbleGraphics, { scaleX: 1.0, scaleY: 1.0 }, { duration: 400, easing: tween.bounceOut }); } }); }; self.pop = function () { var popSounds = ['pop1', 'pop2', 'pop3', 'pop4']; var soundToPlay = self.isGolden ? 'goldenPop' : popSounds[self.noteIndex]; LK.getSound(soundToPlay).play(); // Create particle explosion createParticleExplosion(self.x, self.y, self.color, self.isGolden); // Enhanced pop animation tween(bubbleGraphics, { scaleX: 2.0, scaleY: 2.0, alpha: 0, rotation: Math.PI * 2 }, { duration: 300, easing: tween.easeOut, onFinish: function onFinish() { self.destroy(); } }); }; self.down = function (x, y, obj) { var currentTime = LK.ticks; var beatInterval = 60; var beatPosition = currentTime % beatInterval; var timingWindow = 12; // Slightly larger timing window var isPerfectTiming = beatPosition <= timingWindow || beatPosition >= beatInterval - timingWindow; // Visual feedback on touch tween(bubbleGraphics, { scaleX: 0.8, scaleY: 0.8 }, { duration: 100, easing: tween.easeOut, onFinish: function onFinish() { tween(bubbleGraphics, { scaleX: 1.0, scaleY: 1.0 }, { duration: 100, easing: tween.easeOut }); } }); if (isPerfectTiming) { onBubblePopped(self, true); } else { onBubblePopped(self, false); } }; return self; }); var Particle = Container.expand(function (color, size) { var self = Container.call(this); var particleGraphics = self.attachAsset('particle', { anchorX: 0.5, anchorY: 0.5 }); particleGraphics.tint = color || 0xFFFFFF; particleGraphics.scaleX = size || 1; particleGraphics.scaleY = size || 1; self.velocity = { x: 0, y: 0 }; self.gravity = 0.2; self.life = 60; // 1 second at 60fps self.update = function () { self.x += self.velocity.x; self.y += self.velocity.y; self.velocity.y += self.gravity; self.life--; // Fade out over time particleGraphics.alpha = self.life / 60; if (self.life <= 0) { self.destroy(); } }; return self; }); var PerfectIndicator = Container.expand(function () { var self = Container.call(this); var indicator = self.attachAsset('perfectIndicator', { anchorX: 0.5, anchorY: 0.5, alpha: 0 }); self.show = function (x, y) { self.x = x; self.y = y; indicator.alpha = 1; indicator.scaleX = 0.5; indicator.scaleY = 0.5; tween(indicator, { scaleX: 1, scaleY: 1, alpha: 0 }, { duration: 500, easing: tween.easeOut, onFinish: function onFinish() { self.destroy(); } }); }; return self; }); var Scorpion = Container.expand(function () { var self = Container.call(this); // Create scorpion body var scorpionBody = self.attachAsset('scorpionBody', { anchorX: 0.5, anchorY: 0.5 }); // Create left claw var leftClaw = self.attachAsset('scorpionClaw', { anchorX: 1.0, anchorY: 0.5 }); leftClaw.x = -25; leftClaw.y = -10; leftClaw.rotation = -0.3; // Create right claw var rightClaw = self.attachAsset('scorpionClaw', { anchorX: 1.0, anchorY: 0.5 }); rightClaw.x = -25; rightClaw.y = 10; rightClaw.rotation = 0.3; // Create tail segments var tailSegments = []; for (var i = 0; i < 4; i++) { var segment = self.attachAsset('scorpionTail', { anchorX: 0.0, anchorY: 0.5 }); segment.x = 40 + i * 12; segment.y = 0; segment.rotation = i * 0.1; segment.scaleX = 0.8 - i * 0.1; tailSegments.push(segment); } // Create stinger at the end var stinger = self.attachAsset('scorpionStinger', { anchorX: 0.5, anchorY: 0.5 }); stinger.x = 88; stinger.y = -5; // Store references for animations self.body = scorpionBody; self.leftClaw = leftClaw; self.rightClaw = rightClaw; self.tailSegments = tailSegments; self.stinger = stinger; self.animationTimer = 0; self.speed = 0.5; // Very slow movement self.targetBubble = null; self.lastTargetTime = 0; // Find nearest bubble to target self.findTarget = function () { var nearestBubble = null; var nearestDistance = Infinity; for (var i = 0; i < bubbles.length; i++) { var bubble = bubbles[i]; var distance = Math.sqrt(Math.pow(self.x - bubble.x, 2) + Math.pow(self.y - bubble.y, 2)); if (distance < nearestDistance) { nearestDistance = distance; nearestBubble = bubble; } } return nearestBubble; }; self.update = function () { self.animationTimer++; // Animate tail swishing for (var i = 0; i < self.tailSegments.length; i++) { var segment = self.tailSegments[i]; segment.rotation = Math.sin(self.animationTimer * 0.1 + i * 0.5) * 0.2 + i * 0.1; } // Animate stinger bobbing self.stinger.y = -5 + Math.sin(self.animationTimer * 0.15) * 3; // Animate claws opening and closing var clawAnimation = Math.sin(self.animationTimer * 0.08) * 0.2; self.leftClaw.rotation = -0.3 + clawAnimation; self.rightClaw.rotation = 0.3 - clawAnimation; // Body bobbing while walking self.body.y = Math.sin(self.animationTimer * 0.12) * 2; // Find new target every 2 seconds or if current target is destroyed if (LK.ticks - self.lastTargetTime > 120 || !self.targetBubble || self.targetBubble.destroyed) { self.targetBubble = self.findTarget(); self.lastTargetTime = LK.ticks; } // Move towards target bubble if (self.targetBubble && !self.targetBubble.destroyed) { var dx = self.targetBubble.x - self.x; var dy = self.targetBubble.y - self.y; var distance = Math.sqrt(dx * dx + dy * dy); if (distance > 5) { // Move towards bubble self.x += dx / distance * self.speed; self.y += dy / distance * self.speed; // Rotate entire scorpion towards target self.rotation = Math.atan2(dy, dx); // Faster tail animation when moving for (var j = 0; j < self.tailSegments.length; j++) { var seg = self.tailSegments[j]; seg.rotation = Math.sin(self.animationTimer * 0.2 + j * 0.5) * 0.3 + j * 0.15; } } else { // Close enough to pop the bubble if (self.targetBubble && !self.targetBubble.destroyed) { // Attack animation - claws snap self.leftClaw.rotation = -0.8; self.rightClaw.rotation = 0.8; // Scorpion pops the bubble (counts as missed for player) for (var i = 0; i < bubbles.length; i++) { if (bubbles[i] === self.targetBubble) { bubbles.splice(i, 1); break; } } self.targetBubble.pop(); missedBeat(); // Player loses health self.targetBubble = null; } } } // Keep scorpion within screen bounds if (self.x < 50) self.x = 50; if (self.x > 1998) self.x = 1998; if (self.y < 50) self.y = 50; if (self.y > 2682) self.y = 2682; }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x1a1a2e }); /**** * Game Code ****/ var gameState = 'start'; // 'start' or 'playing' var bubbles = []; var particles = []; var beatRings = []; var score = 0; var combo = 0; var health = 5; var gameSpeed = 1; var spawnTimer = 0; var beatTimer = 0; var perfectIndicators = []; var bubbleColors = [0x4A90E2, 0xFF6B6B, 0x4ECDC4, 0xFFE66D, 0x95E1D3, 0xFF69B4, 0x32CD32, 0xFFA500]; var bestScore = storage.bestScore || 0; var scorpion = null; // Particle explosion function function createParticleExplosion(x, y, color, isGolden) { var particleCount = isGolden ? 15 : 8; var particleColors = isGolden ? [0xFFD700, 0xFFA500, 0xFFFF00] : [color, 0xFFFFFF]; for (var i = 0; i < particleCount; i++) { var particle = new Particle(particleColors[Math.floor(Math.random() * particleColors.length)], 0.5 + Math.random() * 0.5); particle.x = x + (Math.random() - 0.5) * 40; particle.y = y + (Math.random() - 0.5) * 40; particle.velocity.x = (Math.random() - 0.5) * 8; particle.velocity.y = (Math.random() - 0.5) * 8 - 2; particles.push(particle); game.addChild(particle); } } // Create beat ring effect function createBeatRing() { var ring = new BeatRing(); ring.x = 2048 / 2; ring.y = 2732 / 2; beatRings.push(ring); game.addChild(ring); ring.animate(); } // Enhanced background effects function updateBackgroundEffects() { // Background pulse removed } // Start screen UI var titleText = new Text2('START', { size: 200, fill: 0xFFD700 }); titleText.anchor.set(0.5, 0.5); LK.gui.center.addChild(titleText); var instructionsText = new Text2('Pop bubbles in rhythm with the music!\nTap to start playing', { size: 60, fill: 0xFFFFFF }); instructionsText.anchor.set(0.5, 0.5); instructionsText.y = 200; LK.gui.center.addChild(instructionsText); var startBestScoreText = new Text2('Best Score: ' + bestScore, { size: 80, fill: 0x4ECDC4 }); startBestScoreText.anchor.set(0.5, 0.5); startBestScoreText.y = 350; LK.gui.center.addChild(startBestScoreText); // Game UI (initially hidden) var scoreText = new Text2('Score: 0', { size: 80, fill: 0xFFFFFF }); scoreText.anchor.set(0.5, 0); scoreText.visible = false; LK.gui.top.addChild(scoreText); var comboText = new Text2('Combo: 0', { size: 60, fill: 0xFFD700 }); comboText.anchor.set(0, 0); comboText.x = 50; comboText.y = 120; comboText.visible = false; LK.gui.top.addChild(comboText); var healthText = new Text2('♥♥♥♥♥', { size: 70, fill: 0xFF4444 }); healthText.anchor.set(1, 0); healthText.visible = false; LK.gui.topRight.addChild(healthText); var bestScoreText = new Text2('Best: ' + bestScore, { size: 50, fill: 0xFFFFFF }); bestScoreText.anchor.set(0, 0); bestScoreText.x = 50; bestScoreText.y = 200; bestScoreText.visible = false; LK.gui.top.addChild(bestScoreText); function startGame() { gameState = 'playing'; // Hide start screen UI titleText.visible = false; instructionsText.visible = false; startBestScoreText.visible = false; // Show game UI scoreText.visible = true; comboText.visible = true; healthText.visible = true; bestScoreText.visible = true; // Spawn scorpion scorpion = new Scorpion(); scorpion.x = Math.random() * 1800 + 124; scorpion.y = Math.random() * 2400 + 166; game.addChild(scorpion); } // Touch handler for starting game game.down = function (x, y, obj) { if (gameState === 'start') { startGame(); } }; function updateUI() { scoreText.setText('Score: ' + score); comboText.setText('Combo: ' + combo); var hearts = ''; for (var i = 0; i < health; i++) { hearts += '♥'; } healthText.setText(hearts); // Update best score if current score is higher if (score > bestScore) { bestScore = score; storage.bestScore = bestScore; bestScoreText.setText('Best: ' + bestScore); } } function spawnBubble() { var isGolden = Math.random() < 0.15; // 15% chance for golden bubble var color = bubbleColors[Math.floor(Math.random() * bubbleColors.length)]; var bubble = new Bubble(color, isGolden); // Better spawn positioning with grid-like distribution var attempts = 0; var maxAttempts = 20; do { bubble.x = Math.random() * (2048 - 300) + 150; bubble.y = Math.random() * (2732 - 600) + 300; attempts++; } while (isTooCloseToOthers(bubble) && attempts < maxAttempts); if (attempts < maxAttempts) { bubbles.push(bubble); game.addChild(bubble); bubble.spawned = true; bubble.lastPulseTime = LK.ticks; // Enhanced spawn animation with rotation and bounce bubble.alpha = 0; bubble.scaleX = 0; bubble.scaleY = 0; bubble.rotation = Math.PI * 2; bubble.y -= 100; // Start above final position tween(bubble, { alpha: 1, scaleX: 1.2, scaleY: 1.2, rotation: 0, y: bubble.y + 100 }, { duration: 500, easing: tween.bounceOut, onFinish: function onFinish() { tween(bubble, { scaleX: 1, scaleY: 1 }, { duration: 200, easing: tween.easeOut }); bubble.startFloat(); // Start floating animation } }); // Add sparkle effect for golden bubbles if (isGolden) { createSparkleEffect(bubble); } } else { bubble.destroy(); } } function isTooCloseToOthers(bubble) { for (var i = 0; i < bubbles.length; i++) { var distance = Math.sqrt(Math.pow(bubble.x - bubbles[i].x, 2) + Math.pow(bubble.y - bubbles[i].y, 2)); if (distance < 200) { return true; } } return false; } function createSparkleEffect(bubble) { var sparkleTimer = LK.setInterval(function () { if (bubble.destroyed) { LK.clearInterval(sparkleTimer); return; } var sparkle = new Particle(0xFFD700, 0.3); sparkle.x = bubble.x + (Math.random() - 0.5) * 100; sparkle.y = bubble.y + (Math.random() - 0.5) * 100; sparkle.velocity.x = (Math.random() - 0.5) * 1; sparkle.velocity.y = (Math.random() - 0.5) * 1; sparkle.gravity = -0.05; // Float upward more slowly particles.push(sparkle); game.addChild(sparkle); }, 400); } function onBubblePopped(bubble, isPerfect) { var basePoints = bubble.isGolden ? 100 : 10; var points = isPerfect ? basePoints * 2 : basePoints; if (isPerfect) { combo++; points *= 1 + combo * 0.1; // Show perfect indicator var indicator = new PerfectIndicator(); perfectIndicators.push(indicator); game.addChild(indicator); indicator.show(bubble.x, bubble.y); if (bubble.isGolden) { LK.effects.flashScreen(0xFFD700, 300); } } else { combo = 0; } score += Math.floor(points); // Remove bubble from array for (var i = 0; i < bubbles.length; i++) { if (bubbles[i] === bubble) { bubbles.splice(i, 1); break; } } bubble.pop(); updateUI(); } function missedBeat() { combo = 0; health--; LK.effects.flashScreen(0xFF0000, 200); LK.getSound('miss').play(); if (health <= 0) { LK.showGameOver(); } updateUI(); } // Start background music LK.playMusic('bgMusic'); game.update = function () { if (gameState === 'start') { // Update best score display on start screen startBestScoreText.setText('Best Score: ' + bestScore); // Animate start screen elements titleText.rotation = Math.sin(LK.ticks * 0.01) * 0.1; return; } beatTimer++; spawnTimer++; updateBackgroundEffects(); // Enhanced beat visualization if (beatTimer % 60 === 0) { // Every second - create beat ring and pulse bubbles createBeatRing(); for (var i = 0; i < bubbles.length; i++) { bubbles[i].startPulse(); } } // Update particles for (var p = particles.length - 1; p >= 0; p--) { var particle = particles[p]; if (particle.destroyed) { particles.splice(p, 1); } } // Clean up beat rings for (var r = beatRings.length - 1; r >= 0; r--) { if (beatRings[r].destroyed) { beatRings.splice(r, 1); } } // Check if 6 bubbles are on screen - game over condition (increased from 5) if (bubbles.length >= 6) { // Update best score before game over if (score > bestScore) { bestScore = score; storage.bestScore = bestScore; } // Screen shake effect before game over LK.effects.flashScreen(0xFF0000, 500); LK.showGameOver(); } // Dynamic spawn rate based on score and combo var baseSpawnRate = Math.max(150 - Math.floor(score / 50) * 5, 80); var comboBonus = Math.min(combo * 5, 30); var spawnRate = baseSpawnRate - comboBonus; if (spawnTimer >= spawnRate && bubbles.length < 10) { spawnBubble(); spawnTimer = 0; } // Remove bubbles that have been on screen too long for (var i = bubbles.length - 1; i >= 0; i--) { var bubble = bubbles[i]; // Slightly longer lifetime for better gameplay if (bubble.spawned && LK.ticks - bubble.lastPulseTime > 1500) { // Warning effect before removal tween(bubble, { alpha: 0.3, scaleX: 0.8, scaleY: 0.8 }, { duration: 300, easing: tween.easeOut, onFinish: function onFinish() { if (!bubble.destroyed) { bubble.destroy(); bubbles.splice(i, 1); missedBeat(); } } }); } } // Clean up perfect indicators for (var j = perfectIndicators.length - 1; j >= 0; j--) { if (perfectIndicators[j].destroyed) { perfectIndicators.splice(j, 1); } } // Update scorpion if (scorpion && !scorpion.destroyed) { // Scorpion updates automatically via its update method } // Increase difficulty gameSpeed = 1 + score / 1000; // Win condition if (score >= 3000) { LK.showYouWin(); } }; // Initialize UI updateUI();
===================================================================
--- original.js
+++ change.js
@@ -224,15 +224,56 @@
return self;
});
var Scorpion = Container.expand(function () {
var self = Container.call(this);
- var scorpionGraphics = self.attachAsset('heartShape', {
+ // Create scorpion body
+ var scorpionBody = self.attachAsset('scorpionBody', {
anchorX: 0.5,
anchorY: 0.5
});
- scorpionGraphics.tint = 0x8B4513; // Brown color for scorpion
- scorpionGraphics.scaleX = 1.5;
- scorpionGraphics.scaleY = 1.5;
+ // Create left claw
+ var leftClaw = self.attachAsset('scorpionClaw', {
+ anchorX: 1.0,
+ anchorY: 0.5
+ });
+ leftClaw.x = -25;
+ leftClaw.y = -10;
+ leftClaw.rotation = -0.3;
+ // Create right claw
+ var rightClaw = self.attachAsset('scorpionClaw', {
+ anchorX: 1.0,
+ anchorY: 0.5
+ });
+ rightClaw.x = -25;
+ rightClaw.y = 10;
+ rightClaw.rotation = 0.3;
+ // Create tail segments
+ var tailSegments = [];
+ for (var i = 0; i < 4; i++) {
+ var segment = self.attachAsset('scorpionTail', {
+ anchorX: 0.0,
+ anchorY: 0.5
+ });
+ segment.x = 40 + i * 12;
+ segment.y = 0;
+ segment.rotation = i * 0.1;
+ segment.scaleX = 0.8 - i * 0.1;
+ tailSegments.push(segment);
+ }
+ // Create stinger at the end
+ var stinger = self.attachAsset('scorpionStinger', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ stinger.x = 88;
+ stinger.y = -5;
+ // Store references for animations
+ self.body = scorpionBody;
+ self.leftClaw = leftClaw;
+ self.rightClaw = rightClaw;
+ self.tailSegments = tailSegments;
+ self.stinger = stinger;
+ self.animationTimer = 0;
self.speed = 0.5; // Very slow movement
self.targetBubble = null;
self.lastTargetTime = 0;
// Find nearest bubble to target
@@ -249,8 +290,22 @@
}
return nearestBubble;
};
self.update = function () {
+ self.animationTimer++;
+ // Animate tail swishing
+ for (var i = 0; i < self.tailSegments.length; i++) {
+ var segment = self.tailSegments[i];
+ segment.rotation = Math.sin(self.animationTimer * 0.1 + i * 0.5) * 0.2 + i * 0.1;
+ }
+ // Animate stinger bobbing
+ self.stinger.y = -5 + Math.sin(self.animationTimer * 0.15) * 3;
+ // Animate claws opening and closing
+ var clawAnimation = Math.sin(self.animationTimer * 0.08) * 0.2;
+ self.leftClaw.rotation = -0.3 + clawAnimation;
+ self.rightClaw.rotation = 0.3 - clawAnimation;
+ // Body bobbing while walking
+ self.body.y = Math.sin(self.animationTimer * 0.12) * 2;
// Find new target every 2 seconds or if current target is destroyed
if (LK.ticks - self.lastTargetTime > 120 || !self.targetBubble || self.targetBubble.destroyed) {
self.targetBubble = self.findTarget();
self.lastTargetTime = LK.ticks;
@@ -263,13 +318,21 @@
if (distance > 5) {
// Move towards bubble
self.x += dx / distance * self.speed;
self.y += dy / distance * self.speed;
- // Rotate towards target
- scorpionGraphics.rotation = Math.atan2(dy, dx);
+ // Rotate entire scorpion towards target
+ self.rotation = Math.atan2(dy, dx);
+ // Faster tail animation when moving
+ for (var j = 0; j < self.tailSegments.length; j++) {
+ var seg = self.tailSegments[j];
+ seg.rotation = Math.sin(self.animationTimer * 0.2 + j * 0.5) * 0.3 + j * 0.15;
+ }
} else {
// Close enough to pop the bubble
if (self.targetBubble && !self.targetBubble.destroyed) {
+ // Attack animation - claws snap
+ self.leftClaw.rotation = -0.8;
+ self.rightClaw.rotation = 0.8;
// Scorpion pops the bubble (counts as missed for player)
for (var i = 0; i < bubbles.length; i++) {
if (bubbles[i] === self.targetBubble) {
bubbles.splice(i, 1);