/**** 
* Classes
****/ 
var BloodSplatter = Container.expand(function () {
	var self = Container.call(this);
	var scale = (0.5 + Math.random() * 0.5) * 2.5;
	var splatterGraphics = self.attachAsset('bloodSplatter', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	splatterGraphics.scale.set(scale, scale);
	self.lifeSpan = 500;
	self.on('tick', function () {
		self.lifeSpan -= 16.6667;
		if (self.lifeSpan <= 0) {
			LK.setTimeout(function () {
				self.destroy();
			}, 3000);
		}
	});
});
var BlueEnemy = Container.expand(function () {
	var self = Container.call(this);
	var enemyGraphics = self.attachAsset('blueEnemy', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.speed = 6.25;
	self.teleportTimer = 0;
	self.teleportInterval = 1;
	self._move_migrated = function () {
		self.y += self.speed;
		if (self.y > game.height || self.x < 0 || self.x > 2048) {
			self.destroy();
		}
		self.teleportTimer += 1 / 60;
		if (self.teleportTimer >= self.teleportInterval) {
			var teleportDirection = Math.random() < 0.5 ? -200 : 200;
			self.x += Math.max(0, Math.min(2048 - self.width, self.x + teleportDirection)) - self.x;
			self.teleportTimer = 0;
		}
	};
});
var Bullet = Container.expand(function () {
	var self = Container.call(this);
	var scale = 0.85 + Math.random() * 0.55;
	var bulletGraphics = self.attachAsset('bullet', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	bulletGraphics.scale.set(scale, scale);
	self.speed = 20;
	self._move_migrated = function () {
		self.y -= self.speed;
	};
});
var GraySquare = Container.expand(function () {
	var self = Container.call(this);
	var graySquareGraphics = self.attachAsset('graySquare', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	graySquareGraphics.width = 150;
	graySquareGraphics.height = 150;
	graySquareGraphics.tint = 0x808080;
});
var GreenPowerup = Container.expand(function () {
	var self = Container.call(this);
	var powerupGraphics = self.attachAsset('greenPowerup', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.amplitude = 10;
	self.frequency = 0.05;
	self.baseY = self.y;
	self._move_migrated = function () {
		self.y = self.baseY + self.amplitude * Math.sin(LK.ticks * self.frequency);
	};
});
var RedEnemy = Container.expand(function () {
	var self = Container.call(this);
	var enemyGraphics = self.attachAsset('redEnemy', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.speed = 10;
	self._move_migrated = function () {
		self.y += self.speed;
		if (self.y > game.height || self.x < 0 || self.x > 2048) {
			self.destroy();
		}
	};
});
var Santa = Container.expand(function () {
	var self = Container.call(this);
	var santaGraphics = self.attachAsset('santa', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	santaGraphics.rotation = -Math.PI / 2;
	self.direction = 1;
	self.speed = 15;
	self._move_migrated = function () {
		if (self.x >= 2048 - this.width * 0.6 || self.x <= this.width * 0.6) {
			self.direction *= -1;
			santaGraphics.scale.y *= -1;
		}
		self.x += self.speed * self.direction;
	};
	self.fire = function () {
		this.direction *= -1;
		santaGraphics.scale.y *= -1;
	};
});
var SpecialObject = Container.expand(function () {
	var self = Container.call(this);
	var specialObjectGraphics = self.attachAsset('specialObject', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	specialObjectGraphics.scale.x *= 4;
	self.speed = 2;
	self._move_migrated = function () {
		self.y += self.speed;
	};
	self.canBeHit = true;
	self.hit = function () {
		if (!self.canBeHit) {
			return;
		}
		self.canBeHit = false;
		self.speed = -self.speed;
		LK.setTimeout(function () {
			self.speed = Math.abs(self.speed);
			self.canBeHit = true;
		}, 1000);
	};
});
var YellowEnemy = Container.expand(function () {
	var self = Container.call(this);
	var enemyGraphics = self.attachAsset('yellowEnemy', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.speed = 3.75;
	self.scaleIncrement = 0.2;
	self.scaleTimer = 0;
	self._move_migrated = function () {
		self.y += self.speed;
		if (self.y > game.height || self.x < 0 || self.x > 2048) {
			self.destroy();
		}
		self.scaleTimer += 1 / 60;
		if (self.scaleTimer >= 1) {
			self.scale.x += self.scaleIncrement;
			self.scale.y += self.scaleIncrement;
			self.scaleTimer = 0;
		}
	};
});
/**** 
* Initialize Game
****/ 
var game = new LK.Game({
	backgroundColor: 0x000000
});
/**** 
* Game Code
****/ 
// Check if sMetalMusic is playing every 3 seconds
LK.effects.shakeScreen = function (duration) {
	var originalX = game.x;
	var originalY = game.y;
	var shakeIntensity = 10;
	var shakeDuration = duration;
	var shakeInterval = 16.6667; // Approximately 60 FPS
	var shake = function shake() {
		if (shakeDuration > 0) {
			var offsetX = (Math.random() - 0.5) * shakeIntensity;
			var offsetY = (Math.random() - 0.5) * shakeIntensity;
			game.x = originalX + offsetX;
			game.y = originalY + offsetY;
			shakeDuration -= shakeInterval;
			LK.setTimeout(shake, shakeInterval);
		} else {
			game.x = originalX;
			game.y = originalY;
		}
	};
	shake();
};
var checkMusicInterval = LK.setInterval(function () {
	var sMetalMusic = LK.getSound('sMetalMusic');
	if (!sMetalMusic.isPlaying) {
		console.log('sMetalMusic is not playing');
		sMetalMusic.play();
	} else {
		console.log('sMetalMusic is playing');
	}
}, 3000);
function playHohohoSound() {
	LK.setTimeout(function () {
		LK.getSound('sHohoho').play();
	}, 500);
}
playHohohoSound();
var background = game.attachAsset('background', {});
background.width = 2048;
background.height = 2732;
game.addChildAt(background, 0);
var santa = game.addChild(new Santa());
var greenPowerup;
var greenPowerupSpawnTimer;
var score = 0;
var specialObject;
var specialObjectSpawned = false;
var scoreTxt = new Text2(score.toString(), {
	size: 100,
	fill: "#FFA500"
});
scoreTxt.y += 94;
scoreTxt.anchor.set(.5, 0);
LK.gui.top.addChild(scoreTxt);
var remainingBulletsTxt = new Text2('Bullets: 5', {
	size: 70,
	fill: "#FFA500"
});
remainingBulletsTxt.y = scoreTxt.height + 114;
remainingBulletsTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(remainingBulletsTxt);
var bullets = [];
var enemies = [];
santa.x = 2048 / 2;
santa.y = 2732 - santa.height;
var spawnEnemy = function spawnEnemy() {
	var enemyType = Math.random();
	var enemy;
	if (enemyType < 0.33) {
		enemy = new YellowEnemy();
	} else if (enemyType < 0.66) {
		enemy = new BlueEnemy();
	} else {
		enemy = new RedEnemy();
	}
	var boundaryPadding = enemy.width;
	enemy.x = Math.random() * (2048 - boundaryPadding * 2) + boundaryPadding;
	enemy.y = 0;
	enemies.push(enemy);
	if (specialObject && specialObject.parent === game) {
		game.addChildAt(enemy, game.getChildIndex(specialObject));
	} else {
		if (specialObject && specialObject.parent === game) {
			game.addChildAt(enemy, game.getChildIndex(specialObject) - 1);
		} else {
			game.addChild(enemy);
		}
	}
};
var fireBullet = function fireBullet() {
	if (bullets.length < 5) {
		santa.fire();
		var bullet = new Bullet();
		bullet.x = santa.x;
		bullet.y = santa.y - santa.height / 2 - bullet.height / 2;
		var graySquare = new GraySquare();
		graySquare.x = bullet.x;
		graySquare.y = bullet.y + 50;
		game.addChild(graySquare);
		LK.setTimeout(function () {
			graySquare.destroy();
		}, 500);
		bullets.push(bullet);
		game.addChild(bullet);
		bullet._move_migrated();
		remainingBulletsTxt.setText('Bullets: ' + (5 - bullets.length).toString());
		// Play sBazooka sound when Santa fires a bullet
		LK.getSound('sBazooka').play();
	}
};
game.on('down', function (x, y, obj) {
	if (santa.x > santa.width * 0.6 && santa.x < 2048 - santa.width * 0.6) {
		fireBullet();
	}
});
LK.on('tick', function () {
	santa._move_migrated();
	bullets.forEach(function (bullet, bulletIndex) {
		bullet._move_migrated();
		if (bullet.y < -bullet.height) {
			bullet.destroy();
			bullets.splice(bulletIndex, 1);
			remainingBulletsTxt.setText('Bullets: ' + (5 - bullets.length).toString());
			return;
		}
		enemies.forEach(function (enemy, enemyIndex) {
			if (bullet.intersects(enemy)) {
				bullet.destroy();
				// Play sSplurt, sSplurt2, or sSplurt3 sound before instantiating BloodSplatter
				var splurtSounds = ['sSplurt', 'sSplurt2', 'sSplurt3'];
				var randomSplurtSound = splurtSounds[Math.floor(Math.random() * splurtSounds.length)];
				LK.getSound(randomSplurtSound).play();
				var splatter = new BloodSplatter();
				splatter.x = enemy.x;
				splatter.y = enemy.y;
				game.addChild(splatter);
				enemy.destroy();
				enemies.forEach(function (e) {
					e.speed *= 1.1;
				});
				score += 1;
				if (score >= 100 && !specialObjectSpawned) {
					specialObject = new SpecialObject();
					specialObject.x = 2048 / 2;
					specialObject.y = -1300;
					game.addChild(specialObject);
					specialObjectSpawned = true;
					// Play sWallSound after SpecialObject is instantiated
					LK.getSound('sWallSound').play();
					var deathText = new Text2('Death Is Inevitable', {
						size: 150,
						fill: '#ffffff',
						align: 'center'
					});
					deathText.anchor.set(0.5, 0.5);
					deathText.x = 2048 / 4 + 225;
					deathText.y = 2732 / 2 - deathText.height / 2 - 300;
					LK.gui.topLeft.addChild(deathText);
					var toggleTransparency = function toggleTransparency() {
						deathText.alpha = deathText.alpha === 1 ? 0 : 1;
					};
					var transparencyInterval = LK.setInterval(toggleTransparency, 500);
					LK.setTimeout(function () {
						LK.clearInterval(transparencyInterval);
						deathText.destroy();
					}, 5000);
				}
				scoreTxt.setText(score.toString());
				santa.speed += 1;
				bullets.splice(bulletIndex, 1);
				enemies.splice(enemyIndex, 1);
				remainingBulletsTxt.setText('Bullets: ' + (4 - bullets.length).toString());
			} else if (greenPowerup && bullet.intersects(greenPowerup)) {
				// Play sExplosion sound before greenPowerup is destroyed
				LK.getSound('sExplosion').play();
				bullets.splice(bulletIndex, 1);
				bullet.destroy();
				enemies.forEach(function (e) {
					var splatter = new BloodSplatter();
					splatter.x = e.x;
					splatter.y = e.y;
					game.addChild(splatter);
					e.destroy();
					score += 1;
				});
				enemies.length = 0;
				greenPowerup.destroy();
				LK.effects.shakeScreen(1000);
				LK.effects.flashScreen(0x808080, 1000);
				santa.speed = 15;
				greenPowerup = undefined;
				scoreTxt.setText(score.toString());
				remainingBulletsTxt.setText('Bullets: ' + (4 - bullets.length).toString());
			}
		});
	});
	if (specialObject) {
		specialObject._move_migrated();
		bullets.forEach(function (bullet, bulletIndex) {
			if (bullet.intersects(specialObject) && specialObject.canBeHit) {
				specialObject.hit();
				bullet.destroy();
				bullets.splice(bulletIndex, 1);
				remainingBulletsTxt.setText('Bullets: ' + (5 - bullets.length).toString());
			}
		});
	}
	enemies.forEach(function (enemy) {
		enemy._move_migrated();
		if (santa.intersects(enemy)) {
			LK.setScore(score);
			LK.setScore(score);
			LK.setScore(score);
			LK.setScore(score);
			LK.effects.flashScreen(0xff0000, 1000);
			LK.showGameOver();
			playHohohoSound();
			isGameOver = true;
			playHohohoSound();
		}
	});
});
var enemySpawnRate = 1000 / 1.75;
var enemySpawnTimer = LK.setInterval(spawnEnemy, enemySpawnRate);
LK.on('tick', function () {});
greenPowerupSpawnTimer = LK.setInterval(function () {
	if (greenPowerup && !greenPowerup.isDestroyed) {
		return;
	}
	greenPowerup = new GreenPowerup();
	var centerX = 2048 / 2;
	var centerY = 2732 / 2;
	var randomOffsetX = (Math.random() - 0.5) * 1200;
	var randomOffsetY = (Math.random() - 0.5) * 1200;
	greenPowerup.x = centerX + randomOffsetX - greenPowerup.width / 2;
	greenPowerup.y = centerY + randomOffsetY - greenPowerup.height / 2;
	greenPowerup._move_migrated = function () {
		this.angle += 0.05;
		this.x = this.center.x + this.radius * Math.cos(this.angle);
		this.y = this.center.y + this.radius * Math.sin(this.angle);
	};
	game.addChild(greenPowerup);
}, 15000); /**** 
* Classes
****/ 
var BloodSplatter = Container.expand(function () {
	var self = Container.call(this);
	var scale = (0.5 + Math.random() * 0.5) * 2.5;
	var splatterGraphics = self.attachAsset('bloodSplatter', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	splatterGraphics.scale.set(scale, scale);
	self.lifeSpan = 500;
	self.on('tick', function () {
		self.lifeSpan -= 16.6667;
		if (self.lifeSpan <= 0) {
			LK.setTimeout(function () {
				self.destroy();
			}, 3000);
		}
	});
});
var BlueEnemy = Container.expand(function () {
	var self = Container.call(this);
	var enemyGraphics = self.attachAsset('blueEnemy', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.speed = 6.25;
	self.teleportTimer = 0;
	self.teleportInterval = 1;
	self._move_migrated = function () {
		self.y += self.speed;
		if (self.y > game.height || self.x < 0 || self.x > 2048) {
			self.destroy();
		}
		self.teleportTimer += 1 / 60;
		if (self.teleportTimer >= self.teleportInterval) {
			var teleportDirection = Math.random() < 0.5 ? -200 : 200;
			self.x += Math.max(0, Math.min(2048 - self.width, self.x + teleportDirection)) - self.x;
			self.teleportTimer = 0;
		}
	};
});
var Bullet = Container.expand(function () {
	var self = Container.call(this);
	var scale = 0.85 + Math.random() * 0.55;
	var bulletGraphics = self.attachAsset('bullet', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	bulletGraphics.scale.set(scale, scale);
	self.speed = 20;
	self._move_migrated = function () {
		self.y -= self.speed;
	};
});
var GraySquare = Container.expand(function () {
	var self = Container.call(this);
	var graySquareGraphics = self.attachAsset('graySquare', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	graySquareGraphics.width = 150;
	graySquareGraphics.height = 150;
	graySquareGraphics.tint = 0x808080;
});
var GreenPowerup = Container.expand(function () {
	var self = Container.call(this);
	var powerupGraphics = self.attachAsset('greenPowerup', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.amplitude = 10;
	self.frequency = 0.05;
	self.baseY = self.y;
	self._move_migrated = function () {
		self.y = self.baseY + self.amplitude * Math.sin(LK.ticks * self.frequency);
	};
});
var RedEnemy = Container.expand(function () {
	var self = Container.call(this);
	var enemyGraphics = self.attachAsset('redEnemy', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.speed = 10;
	self._move_migrated = function () {
		self.y += self.speed;
		if (self.y > game.height || self.x < 0 || self.x > 2048) {
			self.destroy();
		}
	};
});
var Santa = Container.expand(function () {
	var self = Container.call(this);
	var santaGraphics = self.attachAsset('santa', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	santaGraphics.rotation = -Math.PI / 2;
	self.direction = 1;
	self.speed = 15;
	self._move_migrated = function () {
		if (self.x >= 2048 - this.width * 0.6 || self.x <= this.width * 0.6) {
			self.direction *= -1;
			santaGraphics.scale.y *= -1;
		}
		self.x += self.speed * self.direction;
	};
	self.fire = function () {
		this.direction *= -1;
		santaGraphics.scale.y *= -1;
	};
});
var SpecialObject = Container.expand(function () {
	var self = Container.call(this);
	var specialObjectGraphics = self.attachAsset('specialObject', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	specialObjectGraphics.scale.x *= 4;
	self.speed = 2;
	self._move_migrated = function () {
		self.y += self.speed;
	};
	self.canBeHit = true;
	self.hit = function () {
		if (!self.canBeHit) {
			return;
		}
		self.canBeHit = false;
		self.speed = -self.speed;
		LK.setTimeout(function () {
			self.speed = Math.abs(self.speed);
			self.canBeHit = true;
		}, 1000);
	};
});
var YellowEnemy = Container.expand(function () {
	var self = Container.call(this);
	var enemyGraphics = self.attachAsset('yellowEnemy', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.speed = 3.75;
	self.scaleIncrement = 0.2;
	self.scaleTimer = 0;
	self._move_migrated = function () {
		self.y += self.speed;
		if (self.y > game.height || self.x < 0 || self.x > 2048) {
			self.destroy();
		}
		self.scaleTimer += 1 / 60;
		if (self.scaleTimer >= 1) {
			self.scale.x += self.scaleIncrement;
			self.scale.y += self.scaleIncrement;
			self.scaleTimer = 0;
		}
	};
});
/**** 
* Initialize Game
****/ 
var game = new LK.Game({
	backgroundColor: 0x000000
});
/**** 
* Game Code
****/ 
// Check if sMetalMusic is playing every 3 seconds
LK.effects.shakeScreen = function (duration) {
	var originalX = game.x;
	var originalY = game.y;
	var shakeIntensity = 10;
	var shakeDuration = duration;
	var shakeInterval = 16.6667; // Approximately 60 FPS
	var shake = function shake() {
		if (shakeDuration > 0) {
			var offsetX = (Math.random() - 0.5) * shakeIntensity;
			var offsetY = (Math.random() - 0.5) * shakeIntensity;
			game.x = originalX + offsetX;
			game.y = originalY + offsetY;
			shakeDuration -= shakeInterval;
			LK.setTimeout(shake, shakeInterval);
		} else {
			game.x = originalX;
			game.y = originalY;
		}
	};
	shake();
};
var checkMusicInterval = LK.setInterval(function () {
	var sMetalMusic = LK.getSound('sMetalMusic');
	if (!sMetalMusic.isPlaying) {
		console.log('sMetalMusic is not playing');
		sMetalMusic.play();
	} else {
		console.log('sMetalMusic is playing');
	}
}, 3000);
function playHohohoSound() {
	LK.setTimeout(function () {
		LK.getSound('sHohoho').play();
	}, 500);
}
playHohohoSound();
var background = game.attachAsset('background', {});
background.width = 2048;
background.height = 2732;
game.addChildAt(background, 0);
var santa = game.addChild(new Santa());
var greenPowerup;
var greenPowerupSpawnTimer;
var score = 0;
var specialObject;
var specialObjectSpawned = false;
var scoreTxt = new Text2(score.toString(), {
	size: 100,
	fill: "#FFA500"
});
scoreTxt.y += 94;
scoreTxt.anchor.set(.5, 0);
LK.gui.top.addChild(scoreTxt);
var remainingBulletsTxt = new Text2('Bullets: 5', {
	size: 70,
	fill: "#FFA500"
});
remainingBulletsTxt.y = scoreTxt.height + 114;
remainingBulletsTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(remainingBulletsTxt);
var bullets = [];
var enemies = [];
santa.x = 2048 / 2;
santa.y = 2732 - santa.height;
var spawnEnemy = function spawnEnemy() {
	var enemyType = Math.random();
	var enemy;
	if (enemyType < 0.33) {
		enemy = new YellowEnemy();
	} else if (enemyType < 0.66) {
		enemy = new BlueEnemy();
	} else {
		enemy = new RedEnemy();
	}
	var boundaryPadding = enemy.width;
	enemy.x = Math.random() * (2048 - boundaryPadding * 2) + boundaryPadding;
	enemy.y = 0;
	enemies.push(enemy);
	if (specialObject && specialObject.parent === game) {
		game.addChildAt(enemy, game.getChildIndex(specialObject));
	} else {
		if (specialObject && specialObject.parent === game) {
			game.addChildAt(enemy, game.getChildIndex(specialObject) - 1);
		} else {
			game.addChild(enemy);
		}
	}
};
var fireBullet = function fireBullet() {
	if (bullets.length < 5) {
		santa.fire();
		var bullet = new Bullet();
		bullet.x = santa.x;
		bullet.y = santa.y - santa.height / 2 - bullet.height / 2;
		var graySquare = new GraySquare();
		graySquare.x = bullet.x;
		graySquare.y = bullet.y + 50;
		game.addChild(graySquare);
		LK.setTimeout(function () {
			graySquare.destroy();
		}, 500);
		bullets.push(bullet);
		game.addChild(bullet);
		bullet._move_migrated();
		remainingBulletsTxt.setText('Bullets: ' + (5 - bullets.length).toString());
		// Play sBazooka sound when Santa fires a bullet
		LK.getSound('sBazooka').play();
	}
};
game.on('down', function (x, y, obj) {
	if (santa.x > santa.width * 0.6 && santa.x < 2048 - santa.width * 0.6) {
		fireBullet();
	}
});
LK.on('tick', function () {
	santa._move_migrated();
	bullets.forEach(function (bullet, bulletIndex) {
		bullet._move_migrated();
		if (bullet.y < -bullet.height) {
			bullet.destroy();
			bullets.splice(bulletIndex, 1);
			remainingBulletsTxt.setText('Bullets: ' + (5 - bullets.length).toString());
			return;
		}
		enemies.forEach(function (enemy, enemyIndex) {
			if (bullet.intersects(enemy)) {
				bullet.destroy();
				// Play sSplurt, sSplurt2, or sSplurt3 sound before instantiating BloodSplatter
				var splurtSounds = ['sSplurt', 'sSplurt2', 'sSplurt3'];
				var randomSplurtSound = splurtSounds[Math.floor(Math.random() * splurtSounds.length)];
				LK.getSound(randomSplurtSound).play();
				var splatter = new BloodSplatter();
				splatter.x = enemy.x;
				splatter.y = enemy.y;
				game.addChild(splatter);
				enemy.destroy();
				enemies.forEach(function (e) {
					e.speed *= 1.1;
				});
				score += 1;
				if (score >= 100 && !specialObjectSpawned) {
					specialObject = new SpecialObject();
					specialObject.x = 2048 / 2;
					specialObject.y = -1300;
					game.addChild(specialObject);
					specialObjectSpawned = true;
					// Play sWallSound after SpecialObject is instantiated
					LK.getSound('sWallSound').play();
					var deathText = new Text2('Death Is Inevitable', {
						size: 150,
						fill: '#ffffff',
						align: 'center'
					});
					deathText.anchor.set(0.5, 0.5);
					deathText.x = 2048 / 4 + 225;
					deathText.y = 2732 / 2 - deathText.height / 2 - 300;
					LK.gui.topLeft.addChild(deathText);
					var toggleTransparency = function toggleTransparency() {
						deathText.alpha = deathText.alpha === 1 ? 0 : 1;
					};
					var transparencyInterval = LK.setInterval(toggleTransparency, 500);
					LK.setTimeout(function () {
						LK.clearInterval(transparencyInterval);
						deathText.destroy();
					}, 5000);
				}
				scoreTxt.setText(score.toString());
				santa.speed += 1;
				bullets.splice(bulletIndex, 1);
				enemies.splice(enemyIndex, 1);
				remainingBulletsTxt.setText('Bullets: ' + (4 - bullets.length).toString());
			} else if (greenPowerup && bullet.intersects(greenPowerup)) {
				// Play sExplosion sound before greenPowerup is destroyed
				LK.getSound('sExplosion').play();
				bullets.splice(bulletIndex, 1);
				bullet.destroy();
				enemies.forEach(function (e) {
					var splatter = new BloodSplatter();
					splatter.x = e.x;
					splatter.y = e.y;
					game.addChild(splatter);
					e.destroy();
					score += 1;
				});
				enemies.length = 0;
				greenPowerup.destroy();
				LK.effects.shakeScreen(1000);
				LK.effects.flashScreen(0x808080, 1000);
				santa.speed = 15;
				greenPowerup = undefined;
				scoreTxt.setText(score.toString());
				remainingBulletsTxt.setText('Bullets: ' + (4 - bullets.length).toString());
			}
		});
	});
	if (specialObject) {
		specialObject._move_migrated();
		bullets.forEach(function (bullet, bulletIndex) {
			if (bullet.intersects(specialObject) && specialObject.canBeHit) {
				specialObject.hit();
				bullet.destroy();
				bullets.splice(bulletIndex, 1);
				remainingBulletsTxt.setText('Bullets: ' + (5 - bullets.length).toString());
			}
		});
	}
	enemies.forEach(function (enemy) {
		enemy._move_migrated();
		if (santa.intersects(enemy)) {
			LK.setScore(score);
			LK.setScore(score);
			LK.setScore(score);
			LK.setScore(score);
			LK.effects.flashScreen(0xff0000, 1000);
			LK.showGameOver();
			playHohohoSound();
			isGameOver = true;
			playHohohoSound();
		}
	});
});
var enemySpawnRate = 1000 / 1.75;
var enemySpawnTimer = LK.setInterval(spawnEnemy, enemySpawnRate);
LK.on('tick', function () {});
greenPowerupSpawnTimer = LK.setInterval(function () {
	if (greenPowerup && !greenPowerup.isDestroyed) {
		return;
	}
	greenPowerup = new GreenPowerup();
	var centerX = 2048 / 2;
	var centerY = 2732 / 2;
	var randomOffsetX = (Math.random() - 0.5) * 1200;
	var randomOffsetY = (Math.random() - 0.5) * 1200;
	greenPowerup.x = centerX + randomOffsetX - greenPowerup.width / 2;
	greenPowerup.y = centerY + randomOffsetY - greenPowerup.height / 2;
	greenPowerup._move_migrated = function () {
		this.angle += 0.05;
		this.x = this.center.x + this.radius * Math.cos(this.angle);
		this.y = this.center.y + this.radius * Math.sin(this.angle);
	};
	game.addChild(greenPowerup);
}, 15000);
 a top view of a 16 bit sprite santa with a bazooka Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
 16 bit sprite of a christmas ornament Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
 16 bit sprite of a red eyed christmas elf Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
 16 bit sprite of a blood splatter Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
 16 bit sprite of a red eye reindeer Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
 16 bit sprite of a red eye mother christmas Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
 16 bit top view background of a christmas field set in hell Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
 16 bit smoke Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
 16 bit wall of skulls with red eyes Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
 "Death Is Inevitable" Text Bubble Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
 16 bit CHRISTMAS bomb power up icon. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.