User prompt
Please fix the bug: 'TypeError: Cannot read properties of undefined (reading 'intersects')' in or related to this line: 'if (child instanceof Magic && blastWave.intersects(child)) {' Line Number: 764
User prompt
any idea why blastwave sometimes does not correctly destroy elf bullets or magic
Code edit (1 edits merged)
Please save this source code
User prompt
also blast snd_blastwave when blastwave is instantiated
User prompt
blastwave has to be scale larger than the playspace before its destroyed
User prompt
blastwave has to be scale larger than the playspace
User prompt
scale blastwave over 2 seconds not 1
User prompt
scale blastwave by 5000% not 500
User prompt
make sure blastwave is 50% transparent
User prompt
make sure blastwave is 60% transparent
User prompt
make sure blastwave is 80% transparent
User prompt
also instantiate blastwave in the center of santa and after 1 second scale it by 500% and destroy it
User prompt
do it
User prompt
Please fix the bug: 'TypeError: Cannot read properties of undefined (reading 'addChild')' in or related to this line: 'this.parent.addChild(tingText);' Line Number: 170
User prompt
When `barnMovedDown` is set to `false` destroy all elf bullets on screen
User prompt
if elf bullet collides with barn, destroy elf bullet
User prompt
if barn moved down is set to false and elf bullet collides with barn, destroy elf bullet and trigger a ricochet sound
User prompt
if barn moved down is set to false and elf bullet collides with barn, destroy elf bullet and trigger a ricochet sound
User prompt
if barn moved down is set to false and elf bullet collides with hit, destroy elf bullet and trigger a ricochet sound
User prompt
if barn moved down is set to true and santa is hit trigger the game over
User prompt
if barn moved down is set to false, santa should be invicinble and anything that hits him should ricochet extremely quick outside of the screen and destroy itself
User prompt
include a check that makes sure that barn moved down equal to true in order to trigger a game over, else destroy whatever hits santa
User prompt
before triggering game over, include a check that makes sure that barn moved down equal to true
User prompt
Show the cross hair momentarily don't leave it there in screen for too long
/****
* Classes
****/
var BadElf = Container.expand(function (spawnX, spawnY, gameInstance) {
var self = Container.call(this);
self.gameInstance = gameInstance;
self.spawnedMagicCount = 1;
self.magicShootingInterval = LK.setInterval(function () {
if (self.visible && self.gameInstance && self.gameInstance.activeMagicCount < self.gameInstance.maxMagicAllowed) {
var magic = new Magic(self.x + 125, self.y, self.gameInstance);
self.gameInstance.addChild(magic);
self.gameInstance.activeMagicCount++;
self.spawnedMagicCount++;
if (self.spawnedMagicCount >= 3) {
self.alpha = 1;
var fadeOutInterval;
var fadeOut = function fadeOut() {
if (self.alpha > 0) {
self.alpha -= 0.05;
} else {
LK.clearInterval(fadeOutInterval);
self.gameInstance.activeBadElves--;
self.destroy();
LK.setTimeout(function () {}, 2000);
}
};
LK.clearInterval(self.magicShootingInterval);
fadeOutInterval = LK.setInterval(fadeOut, 60);
self.magicShootingInterval = null;
}
}
}, Math.random() * (1000 - 500) + 500);
var badElfGraphics = self.attachAsset('badElf', {
anchorX: 0.5,
anchorY: 0.5
});
self.x = spawnX;
self.y = spawnY;
self.on('down', function (x, y, obj) {
LK.setScore(LK.getScore() + 3);
LK.gui.top.children[0].setText(LK.getScore().toString());
this.gameInstance.activeBadElves--;
var obstacleBox = new ObstacleBox(this.x, this.y, this.gameInstance);
obstacleBox.x = this.x;
obstacleBox.y = this.y;
this.parent.addChild(obstacleBox);
LK.setTimeout(function () {
obstacleBox.destroy();
}, 1000);
LK.clearInterval(this.magicShootingInterval);
this.destroy();
if (Math.random() < 0.1) {
this.gameInstance.spawnBadElf();
}
});
});
var Crosshair = Container.expand(function () {
var self = Container.call(this);
self._move_migrated = function (event) {
if (self.parent) {
var pos = self.parent.toLocal(event.global);
self.x = pos.x;
self.y = pos.y;
}
};
var crosshairGraphics = self.attachAsset('crosshair', {
anchorX: 0.5,
anchorY: 0.5
});
self.y = -crosshairGraphics.height / 2;
});
var Heart = Container.expand(function () {
var self = Container.call(this);
var heartGraphics = self.attachAsset('heart', {
anchorX: 0.5,
anchorY: 0.5
});
self.x = heartGraphics.width / 2;
self.y = heartGraphics.height / 2;
});
var Magic = Container.expand(function (x, y, gameInstance) {
var self = Container.call(this);
// Play the enemy shot sound when Magic (elfbullet) is instantiated
LK.getSound('snd_enemyshot').play();
console.log("magic creation triggered");
self.gameInstance = gameInstance;
self.moveEnabled = true;
self.rotation = 0;
var magicGraphics = self.attachAsset('magic', {
anchorX: 0.5,
anchorY: 0.5
});
magicGraphics.width = 125;
magicGraphics.height = 125;
self.x = x;
self.y = y;
self._move_migrated = function () {
if (self.moveEnabled) {
var santaX = self.gameInstance.santa && self.gameInstance.santa.santaGraphics ? self.gameInstance.santa.santaGraphics.x : 2048;
var santaY = self.gameInstance.santa && self.gameInstance.santa.santaGraphics ? self.gameInstance.santa.santaGraphics.y : 2732;
var santaWidth = self.gameInstance.santa && self.gameInstance.santa.santaGraphics ? self.gameInstance.santa.santaGraphics.width : 0;
var magicWidth = magicGraphics ? magicGraphics.width : 0;
var dx = santaX - self.x;
var dy = santaY - self.y;
var distance = Math.sqrt(dx * dx + dy * dy);
var hitThreshold = 10000;
var speed = 10;
if (distance > 0) {
var normX = dx / distance;
var normY = dy / distance;
self.x += normX * speed;
self.y += normY * speed;
}
if (distance <= 450) {
console.log('Hit threshold met. Game over triggered.');
self.gameInstance.triggerGameOver();
}
if (self.gameInstance.santa) {} else if (self.x < 0 || self.x > 2048 || self.y < 0 || self.y > 2732) {
self.gameInstance.activeMagicCount--;
self.destroy();
}
}
};
self.on('down', function () {
LK.setScore(LK.getScore() + 2);
LK.gui.top.children[0].setText(LK.getScore().toString());
var tingText = new Text2('Ting!', {
size: 40,
fill: '#ffffff',
font: 'Arial Black'
});
tingText.x = this.x;
tingText.y = this.y;
tingText.anchor.set(0.5, 0.5);
this.parent.addChild(tingText);
LK.setTimeout(function () {
tingText.destroy();
}, 1000);
this.gameInstance.activeMagicCount--;
LK.getSound('snd_ricochet').play();
this.destroy();
});
});
var Mistletoe = Container.expand(function (gameInstance) {
var self = Container.call(this);
// Play the mistletoe sound when Mistletoe is instantiated
LK.getSound('snd_mistletoe').play();
self.gameInstance = gameInstance;
var mistletoeGraphics = self.attachAsset('mistletoe', {
anchorX: 0.5,
anchorY: 0.5
});
var scale = Math.random() * 0.15 + 0.85;
mistletoeGraphics.scale.set(scale);
var bobbingRange = 10;
var bobbingSpeed = 0.2;
var bobbingPosition = 0;
self.bob = function () {
bobbingPosition += bobbingSpeed;
self.y += Math.sin(bobbingPosition) * bobbingRange;
};
self.on('down', function (x, y, obj) {
LK.setScore(LK.getScore() + 10);
LK.gui.top.children[0].setText(LK.getScore().toString());
self.parent.respawnMistletoe(self);
LK.getSound('snd_mistletoeshot').play();
if (Math.random() < 0.5) {
if (self.gameInstance && typeof self.gameInstance.spawnBadElf === 'function') {
self.gameInstance.spawnBadElf();
}
}
});
});
var MuzzleFlash = Container.expand(function () {
var self = Container.call(this);
self.visible = false;
var flashGraphics = self.attachAsset('muzzleFlash', {
anchorX: 0.5,
anchorY: 0.5
});
self.show = function () {
var randomScale = Math.random() * 0.125 + 0.375;
self.scale.set(randomScale);
self.visible = true;
LK.setTimeout(function () {
self.visible = false;
self.scale.set(1);
}, 100);
};
});
var ObstacleBox = Container.expand(function (x, y, gameInstance) {
var self = Container.call(this);
self.gameInstance = gameInstance;
// Play the obstacle sound when ObstacleBox is instantiated
LK.getSound('snd_obstacle').play();
var obstacleBoxGraphics = self.attachAsset('obstacleBox', {
anchorX: 0.5,
anchorY: 0.5
});
self.x = x;
self.y = y;
});
var RandomText = Container.expand(function () {
var self = Container.call(this);
self.gameInstance = null;
self.display = function (x, y, messages) {
var message = messages[Math.floor(Math.random() * messages.length)];
var text = new Text2(message, {
size: 48,
fill: '#ff0000',
font: 'Arial Black',
stroke: '#000000',
strokeThickness: 6
});
text.x = x - 400;
text.y = y + 175;
text.anchor.set(0.5, 0.5);
self.addChild(text);
LK.getSound('snd_messages').play();
LK.setTimeout(function () {
text.destroy();
self.parent.randomTextActive = false;
}, 3000);
};
});
var Reindeer = Container.expand(function (gameInstance) {
var self = Container.call(this);
// Play the reindeer sound when Reindeer is instantiated
LK.getSound('snd_reindeer').play();
self.moveInArc = function () {
self.arcAngle += self.arcSpeed * self.arcDirection;
self.x = self.gameInstance.x + Math.cos(self.arcAngle) * self.arcRadius;
self.y = self.gameInstance.y + Math.sin(self.arcAngle) * self.arcRadius;
};
self.moveHorizontally = function () {
self.x += self.speed * self.direction;
if (self.x > 2048 || self.x < 0) {
self.direction *= -1;
self.scale.x *= -1;
self.x = Math.max(0, Math.min(self.x, 2048));
}
};
self.fadeOut = function () {
if (self.alpha > 0) {
self.alpha -= 0.01;
} else if (self.gameInstance) {
self.gameInstance.respawnReindeer(self);
}
};
self.gameInstance = gameInstance;
var reindeerGraphics = self.attachAsset('reindeer', {
anchorX: 0.5,
anchorY: 0.5
});
self.addChild(reindeerGraphics);
self.speed = 10;
self.direction = Math.random() < 0.5 ? 1 : -1;
self.x = self.direction === 1 ? 0 : 2048;
self.scale.x = self.direction;
self.on('down', function (x, y, obj) {
LK.setScore(LK.getScore() + 25);
LK.gui.top.children[0].setText(LK.getScore().toString());
var greatText = new Text2('Great!', {
size: 40,
fill: '#ffffff',
font: 'Arial Black'
});
greatText.x = this.x;
greatText.y = this.y;
greatText.anchor.set(0.5, 0.5);
this.parent.addChild(greatText);
LK.setTimeout(function () {
greatText.destroy();
}, 1000);
if (Math.random() < 0.9) {
this.gameInstance.spawnBadElf();
}
this.parent.respawnReindeer();
LK.getSound('snd_reindeershot').play();
this.destroy();
});
});
var Santa = Container.expand(function () {
var self = Container.call(this);
self.santaGraphics = self.attachAsset('santa', {
anchorX: 0.5,
anchorY: 0.5
});
self.santaGraphics.width = 800;
self.santaGraphics.height = 800;
self.santaGraphics.scale.x = 800 / self.santaGraphics.width;
self._move_migrated = function () {};
});
var Shield = Container.expand(function (x, y, gameInstance) {
var self = Container.call(this);
self.gameInstance = gameInstance;
self.x = x;
self.y = y;
self.on('down', function () {
this.destroy();
});
});
var Snowflake = Container.expand(function () {
var self = Container.call(this);
var sizeFactor = Math.random() * 0.5 + 0.5;
var snowflakeGraphics = self.attachAsset('snowflake', {
anchorX: 0.5,
anchorY: 0.5
});
snowflakeGraphics.scale.set(sizeFactor);
self.speed = -3 * sizeFactor;
self._move_migrated = function () {
self.x += self.speed;
self.y += 0.5;
self.scale.x -= 0.003;
self.scale.y -= 0.003;
if (self.scale.x <= 0 || self.scale.y <= 0) {
self.destroy();
}
};
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x000000
});
/****
* Game Code
****/
game.barnMovedDown = false;
// Play and loop the Christmas music when the game starts
LK.playMusic('snd_christmasmusic', {
loop: true
});
game.triggerGameOver = function () {
this.isGameOver = true;
LK.showGameOver();
LK.on('tick', function () {
if (game.isGameOver) {
return;
}
});
};
game.checkMagicCollisionWithSanta = function (magic) {
if (!this.santa || !this.santa.santaGraphics) {
return;
}
var santaX = this.santa && this.santa.santaGraphics ? this.santa.santaGraphics.x : 0;
var santaY = this.santa.santaGraphics.y;
var distance = Math.sqrt(Math.pow(magic.x - santaX, 2) + Math.pow(magic.y - santaY, 2));
var hitThreshold = (this.santa.santaGraphics.width + magic.width) / 4;
if (distance <= hitThreshold) {
this.triggerGameOver();
magic.destroy();
this.activeMagicCount--;
}
};
game.isGameOver = false;
game.activeMagicCount = 0;
game.magicSpawnX = 1024;
game.magicSpawnY = 1366;
game.triggerGameOver = function () {
this.isGameOver = true;
LK.showGameOver();
};
game.maxMagicAllowed = 3;
if (game.activeMagicCount < game.maxMagicAllowed && LK.gui.top.children[0] && LK.gui.top.children[0].visible && game.activeBadElves > 0) {
var magicInstance = new Magic(game.magicSpawnX, game.magicSpawnY, game);
game.addChild(magicInstance);
game.activeMagicCount++;
}
game.respawnReindeer = function (reindeer) {
LK.setTimeout(function () {
var newReindeer = new Reindeer(game);
var spawnLeftSide = Math.random() < 0.5;
newReindeer.x = spawnLeftSide ? 0 : 2048;
newReindeer.y = Math.random() * (2732 / 4 - newReindeer.height) + newReindeer.height;
newReindeer.arcDirection = spawnLeftSide ? 1 : -1;
newReindeer.arcRadius = 2048 / 2;
newReindeer.arcAngle = spawnLeftSide ? Math.PI : 0;
var scale = Math.random() * 0.25 + 0.75;
newReindeer.scale.set(scale);
game.addChild(newReindeer);
LK.on('tick', function () {
newReindeer.moveHorizontally();
});
}, Math.random() < 0.5 ? 8000 : 12000);
};
game.showGreatText = function (x, y) {
var greatText = new Text2('Nice!', {
size: 40,
fill: '#ffffff',
font: 'Arial Black'
});
greatText.x = x;
greatText.y = y;
greatText.anchor.set(0.5, 0.5);
game.addChild(greatText);
LK.setTimeout(function () {
greatText.destroy();
}, 1000);
};
var silentNightText = new Text2('Ready?', {
size: 135,
fill: "#ffffff",
//Optional (this is the default string)
stroke: '#000000',
strokeThickness: 6
});
silentNightText.anchor.set(0.5, 0);
silentNightText.x = 5 / 2;
silentNightText.y = 150;
LK.gui.top.addChild(silentNightText);
game.generateSnowflakes = function () {
var snowflakeInterval = LK.setInterval(function () {
var snowflake = new Snowflake();
snowflake.x = Math.random() * 2048;
snowflake.y = Math.random() * 2732;
game.addChild(snowflake);
}, 1000);
};
LK.setTimeout(function () {
var fadeOutDuration = 2000;
var fadeOutStep = 0.05;
var fadeOutInterval = LK.setInterval(function () {
silentNightText.alpha -= fadeOutStep;
if (silentNightText.alpha <= 0) {
LK.clearInterval(fadeOutInterval);
silentNightText.destroy();
game.score = 0;
game.scoreText = new Text2(game.score.toString(), {
size: 150,
fill: "#ffffff"
});
game.scoreText.anchor.set(0.5, 0);
game.scoreText.x = 5 / 2;
game.scoreText.y = 150;
LK.gui.top.addChild(game.scoreText);
game.updateScore = function (score) {
var previousScore = game.score;
game.score += score;
game.scoreText.setText(game.score.toString());
LK.setScore(game.score);
var scoreIncrease = game.score - previousScore;
if (scoreIncrease >= 20) {
var newInterval = game.badElfSpawnInterval / 1.2;
game.badElfSpawnInterval = Math.max(newInterval, game.minimumSpawnInterval);
LK.clearInterval(game.badElfSpawnTimer);
game.badElfSpawnTimer = LK.setInterval(game.spawnBadElf, game.badElfSpawnInterval);
}
};
game.badElfSpawnInterval = 3500;
game.minimumSpawnInterval = 500;
game.badElfSpawnTimer = LK.setInterval(game.spawnBadElf, game.badElfSpawnInterval);
}
}, fadeOutDuration * fadeOutStep);
game.generateMistletoes = function () {
LK.setTimeout(function () {
var newMistletoe = new Mistletoe();
var boundaryOffset = 100;
newMistletoe.x = Math.random() * (2048 - 2 * boundaryOffset) + boundaryOffset;
newMistletoe.y = Math.random() * (2732 - 2 * boundaryOffset - newMistletoe.height - 300 - 200 - 500) + boundaryOffset + 200;
game.addChild(newMistletoe);
}, 8000);
};
LK.setInterval(function () {
game.activeBadElves = 0;
game.spawnBadElf();
}, 12000);
LK.setTimeout(function () {
var reindeer = new Reindeer(game);
var boundaryOffset = 200;
reindeer.x = Math.random() < 0.5 ? boundaryOffset : 2048 - boundaryOffset - reindeer.width;
reindeer.y = Math.random() * (2732 / 4 - boundaryOffset) + boundaryOffset;
reindeer.arcDirection = Math.random() < 0.5 ? 1 : -1;
reindeer.arcRadius = 2048 / 2;
reindeer.arcAngle = Math.random() < 0.5 ? Math.PI : 0;
var initialScale = Math.random() * 0.25 + 0.75;
reindeer.scale.set(initialScale);
game.addChild(reindeer);
LK.on('tick', function () {
reindeer.moveHorizontally();
});
}, 12000);
LK.setTimeout(game.generateMistletoes, 8000);
}, 2000);
game.on('move', function (x, y, obj) {
crosshair._move_migrated(obj);
});
game.on('down', function (x, y, obj) {
if (game) {
var pos = game.toLocal(obj.global);
crosshair.x = pos.x;
crosshair.y = pos.y;
crosshair.visible = true;
LK.setTimeout(function () {
crosshair.visible = false;
}, 500); // Hide the crosshair after 500ms
LK.setTimeout(function () {
crosshair.visible = false;
}, 500); // Hide the crosshair after 500ms
}
if (hearts.length > 0) {
muzzleFlash.show();
leftClickPressed = true;
lastClickTime = LK.ticks;
LK.getSound('snd_pistol').play(); // Play pistol sound on left click
if (!barnMovedDown) {
game.children.forEach(function (child) {
if (child instanceof BadElf) {
child.y += 100;
}
});
barnBackground.y += 460;
room1Background.y += 100;
boxBackground.y += 100;
crateBackground.y += 100;
missBackground.y += 460;
tireBackground.y += 100;
barnMovedDown = true;
if (Math.random() < 0.10) {
var messages = ["Santa's special delivery!", "This is for the naughty list!", "Ho, ho, ho-hold this!"];
if (!game.randomTextActive) {
game.randomTextActive = true;
var randomText = new RandomText();
randomText.display(santa.x, santa.y - santa.santaGraphics.height / 2, messages);
game.addChild(randomText);
}
}
}
var heart = hearts.pop();
heart.destroy();
}
game.children.forEach(function (child) {
if (child instanceof BadElf && leftClickPressed && LK.ticks - lastClickTime > 30) {
child.y -= 100;
}
});
});
var room1Background = game.attachAsset('Room1', {});
room1Background.anchor.set(0.5, 0.5);
room1Background.x = 2048 / 2;
room1Background.y = 2732 / 2;
game.addChild(room1Background);
var tireBackground = game.attachAsset('Tire', {
anchorX: 0.5,
anchorY: 0.5
});
tireBackground.anchor.set(0.5, 0.5);
tireBackground.x = 700;
tireBackground.y = 1825;
game.addChild(tireBackground);
game.respawnMistletoe = function (mistletoe) {
this.showGreatText(mistletoe.x, mistletoe.y);
mistletoe.destroy();
LK.setTimeout(function () {
var newMistletoe = new Mistletoe();
var boundaryOffset = 100;
newMistletoe.x = Math.random() * (2048 - 2 * boundaryOffset) + boundaryOffset;
newMistletoe.y = Math.random() * (2732 - 2 * boundaryOffset - newMistletoe.height - 300 - 200 - 100 - 500) + boundaryOffset + 300;
game.addChild(newMistletoe);
}, Math.random() * (10000 - 5000) + 5000);
};
game.generateSnowflakes();
var missBackground = game.attachAsset('Miss', {});
missBackground.anchor.set(0.5, 0.5);
missBackground.x = 700;
missBackground.y = 2520;
var crateBackground = game.attachAsset('Crate', {});
crateBackground.anchor.set(0, 1);
crateBackground.x = 205;
crateBackground.y = 2645;
game.addChild(crateBackground);
var boxBackground = game.attachAsset('Box', {});
boxBackground.anchor.set(0, 1);
boxBackground.x = 1350;
boxBackground.y = 2200;
game.addChild(boxBackground);
var barnBackground = game.attachAsset('Barn', {});
barnBackground.anchor.set(0.5, 0.5);
barnBackground.x = 2048 / 2;
barnBackground.y = 2732 - barnBackground.height / 4 + 900;
game.addChild(barnBackground);
game.addChild(missBackground);
var santa = game.addChild(new Santa());
santa.x = 2048 / 2 + 650;
santa.y = 2732 - santa.height / 2 + 10;
var shield = new Shield(santa.x, santa.y - 100, game);
game.addChild(shield);
game.addChild(santa);
var spawnLocations = [{
x: tireBackground.x + 175,
y: tireBackground.y - 65
}, {
x: boxBackground.x,
y: boxBackground.y - 350
}, {
x: crateBackground.x + 250,
y: crateBackground.y - 600
}, {
x: 225,
y: 1685
}, {
x: 1625,
y: 1775
}, {
x: 100,
y: 1100
}];
var usedSpawnLocations = [];
var spawnLocationCounter = 0;
game.activeBadElves = 0;
game.spawnBadElf = function () {
if (game.scoreText && game.activeBadElves < 7) {
if (usedSpawnLocations.length === spawnLocations.length) {
usedSpawnLocations = [];
spawnLocationCounter = 0;
}
var availableLocations = spawnLocations.filter(function (location, index) {
return usedSpawnLocations.indexOf(index) === -1;
});
if (availableLocations.length === 0) {
usedSpawnLocations = [];
availableLocations = spawnLocations.slice();
}
var locationIndex = Math.floor(Math.random() * availableLocations.length);
var location = availableLocations.splice(locationIndex, 1)[0];
usedSpawnLocations.push(spawnLocations.indexOf(location));
spawnLocationCounter++;
if (location) {
console.log(location);
if (location.hasOwnProperty("x") && location.hasOwnProperty("y")) {
var badElf = new BadElf(location.x, location.y, game);
var scaleModifier = Math.random() * 0.25 + 0.75;
badElf.scale.set(scaleModifier, scaleModifier);
game.addChildAt(badElf, game.getChildIndex(boxBackground) + 1);
game.activeBadElves++;
if (Math.random() < 0.1) {
for (var i = 0; i < 3; i++) {
var locationIndex = Math.floor(Math.random() * availableLocations.length);
var location = availableLocations.splice(locationIndex, 1)[0];
if (location) {
console.log(location);
if (location.hasOwnProperty("x") && location.hasOwnProperty("y")) {
var extraBadElf = new BadElf(location.x, location.y, game);
}
}
game.addChildAt(extraBadElf, game.getChildIndex(boxBackground) + 1);
game.activeBadElves++;
}
}
if (Math.random() < 0.2) {
for (var i = 0; i < 2; i++) {
var locationIndex = Math.floor(Math.random() * availableLocations.length);
var location = availableLocations.splice(locationIndex, 1)[0];
if (location) {
console.log(location);
if (location.hasOwnProperty("x") && location.hasOwnProperty("y")) {
var extraBadElf = new BadElf(location.x, location.y, game);
}
}
game.addChildAt(extraBadElf, game.getChildIndex(boxBackground) + 1);
game.activeBadElves++;
}
}
if (Math.random() < 0.35) {
var locationIndex = Math.floor(Math.random() * availableLocations.length);
var location = availableLocations.splice(locationIndex, 1)[0];
if (location) {
console.log(location);
if (location.hasOwnProperty("x") && location.hasOwnProperty("y")) {
var extraBadElf = new BadElf(location.x, location.y, game);
}
}
game.addChildAt(extraBadElf, game.getChildIndex(boxBackground) + 1);
game.activeBadElves++;
}
}
}
}
};
var muzzleFlash = new MuzzleFlash();
muzzleFlash.x = santa.x - santa.santaGraphics.width + 400;
muzzleFlash.y = santa.y - 90;
game.addChild(muzzleFlash);
game.addChild(santa);
var crosshair = game.addChild(new Crosshair());
crosshair.x = 2048 / 2;
crosshair.y = 2732 / 2;
crosshair.visible = false;
var isGameOver = false;
var tickOffset = 0;
var leftClickPressed = false;
var barnMovedDown = false;
var lastClickTime = 0;
var playerLives = 6;
var hearts = [];
for (var i = 0; i < playerLives; i++) {
var heart = new Heart();
heart.x = 1125 + i * (heart.width + 5);
heart.y = santa.y - santa.santaGraphics.height - heart.height / 2 + 350;
hearts.push(heart);
LK.gui.topLeft.addChild(heart);
}
LK.on('tick', function () {
santa._move_migrated();
for (var i = 0; i < game.children.length; i++) {
var child = game.children[i];
if (child instanceof Snowflake) {
child._move_migrated();
} else if (child instanceof Mistletoe) {
child.bob();
} else if (child instanceof Magic) {
child._move_migrated();
game.checkMagicCollisionWithSanta(child);
}
}
if (game.isGameOver) {
return;
}
if (leftClickPressed && LK.ticks - lastClickTime > 30) {
barnBackground.y -= 460;
room1Background.y -= 100;
boxBackground.y -= 100;
crateBackground.y -= 100;
missBackground.y -= 460;
tireBackground.y -= 100;
game.children.forEach(function (child) {
if (child instanceof BadElf && barnMovedDown) {
child.y -= 100;
}
});
leftClickPressed = false;
barnMovedDown = false;
LK.getSound('snd_reload').play();
while (hearts.length < playerLives) {
var heart = new Heart();
heart.x = 1125 + hearts.length * (heart.width + 5);
heart.y = santa.y - santa.santaGraphics.height - heart.height / 2 + 350;
hearts.push(heart);
LK.gui.topLeft.addChild(heart);
}
}
});
over the shoulder santa firing a revolver Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
2d transparent christmas crosshair Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
2d 3rd person front view of a christmas town square with a starry sky Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
Christmas sparkles png Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
circular christmas golden star pattern transparent png Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
2d christmas brick wall Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
2d opened christmas crate Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
2d diagonal christmas car or truck in snow Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
a christmas poster showcasing miss santa clause Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
a single white snowflake Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
2d stacked christmas winter tire Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
2d stacked christmas winter tire Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
2d christmas magical mistletoe Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
2d christmas 357 Magnum bullets Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
2d silhouette of a flying reindeer with a red glowy nose Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
2d christmas dark sparkles Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
2d christmas evil robot elf with a gun Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
2d pile of gray and red nuts and bolts Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
transparent snow sphere. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
snd_pistol
Sound effect
snd_enemyshot
Sound effect
snd_obstacle
Sound effect
snd_messages
Sound effect
snd_ricochet
Sound effect
snd_reindeer
Sound effect
snd_mistletoe
Sound effect
snd_reindeershot
Sound effect
snd_mistletoeshot
Sound effect
snd_christmasmusic
Music
snd_reload
Sound effect
snd_blastwave
Sound effect