User prompt
Fix Bug: 'TypeError: Cannot read properties of undefined (reading 'boundingBox')' in this line: 'console.log('Santa Bounding Box:', gameInstance.santa.boundingBox.x, gameInstance.santa.boundingBox.y, gameInstance.santa.boundingBox.width, gameInstance.santa.boundingBox.height);' Line Number: 40
User prompt
// ... (Other code remains the same) var Magic = Container.expand(function (x, y, gameInstance) { // ... (Initialization code) self.move = function () { if (!self.moveEnabled) return; self.rotation += 0.05; // ... (Movement code) console.log('Magic position:', self.x, self.y); console.log('Santa Bounding Box:', gameInstance.santa.boundingBox.x, gameInstance.santa.boundingBox.y, gameInstance.santa.boundingBox.width, gameInstance.santa.boundingBox.height); console.log('Barn Bounding Box:', gameInstance.barnBoundingBox.x, gameInstance.barnBoundingBox.y, gameInstance.barnBoundingBox.width, gameInstance.barnBoundingBox.height); if (self.isOutOfBounds() || self.isColliding()) { console.log('Collision detected, destroying magic'); self.destroyMagic(); } }; // ... (Rest of the Magic code) }); // ... (Rest of your game code) // Update the bounding box position in Santa's and barnBackground's move functions // For example, in Santa's move function: var Santa = Container.expand(function () { // ... (Initialization code) self.move = function () { // Update Santa's position // ... // Update bounding box position self.boundingBox.x = self.santaGraphics.x - self.santaGraphics.width / 2; self.boundingBox.y = self.santaGraphics.y - self.santaGraphics.height / 2; }; // ... (Rest of the Santa code) }); // Similarly, update the barnBackground bounding box position in its move function
User prompt
// ... (Other code remains the same) var Magic = Container.expand(function (x, y, gameInstance) { // ... (Initialization code) self.move = function () { if (!self.moveEnabled) return; self.rotation += 0.05; // ... (Movement code) // Debugging collision detection console.log('Checking collision:', self.isOutOfBounds(), self.isColliding()); if (self.isOutOfBounds() || self.isColliding()) { console.log('Destroying magic'); self.destroyMagic(); } }; self.isColliding = function () { // Ensure that the bounding boxes are updated correctly var santaCollision = self.gameInstance.santa && self.intersects(self.gameInstance.santa.boundingBox); var barnCollision = self.gameInstance.barnBoundingBox && self.intersects(self.gameInstance.barnBoundingBox); return santaCollision || barnCollision; }; // ... (Rest of the Magic code) }); // ... (Rest of your game code) // Update the bounding box position in Santa's and barnBackground's move functions // For example, in Santa's move function: var Santa = Container.expand(function () { // ... (Initialization code) self.move = function () { // Update Santa's position // ... // Update bounding box position self.boundingBox.x = self.santaGraphics.x - self.santaGraphics.width / 2; self.boundingBox.y = self.santaGraphics.y - self.santaGraphics.height / 2; }; // ... (Rest of the Santa code) }); // Similarly, update the barnBackground bounding box position in its move function
User prompt
var Magic = Container.expand(function (x, y, gameInstance) { var self = Container.call(this); self.gameInstance = gameInstance; self.moveEnabled = false; LK.setTimeout(function () { self.moveEnabled = true; }, 100); // ... (rest of your Magic initialization code) self.move = function () { if (!self.moveEnabled) return; // ... (existing movement code) // Collision check if (self.isOutOfBounds() || self.isColliding()) { self.destroyMagic(); } }; // Check if Magic is out of bounds self.isOutOfBounds = function() { return self.x < 0 || self.x > 2048 || self.y < 0 || self.y > 2732; }; // Check collision with Santa or Barn self.isColliding = function() { return (self.gameInstance.santa && self.intersects(self.gameInstance.santa.boundingBox)) || (self.gameInstance.barnBoundingBox && self.intersects(self.gameInstance.barnBoundingBox)); }; // Method to handle destruction self.destroyMagic = function () { self.gameInstance.activeMagicCount--; self.parent.removeChild(self); }; }); // Game loop optimization var Game = Container.expand(function () { var self = Container.call(this); self.activeMagicCount = 0; // ... (rest of your Game initialization code) LK.on('tick', function () { // Update and move all Magic instances self.children.forEach(function (child) { if (child instanceof Magic) { child.move(); } }); // ... (other game loop operations) }); // ... (rest of your Game code) }); // ... (rest of your code)
User prompt
// Assuming the 'intersects' method is implemented correctly elsewhere // ... var Magic = Container.expand(function (x, y, gameInstance) { var self = Container.call(this); self.gameInstance = gameInstance; self.moveEnabled = false; LK.setTimeout(function () { self.moveEnabled = true; self.gameInstance.magics.push(self); }, 100); // ... (rest of your Magic initialization code) self.move = function () { if (self.moveEnabled) { // ... (existing movement code) // Collision check if (self.x < 0 || self.x > 2048 || self.y < 0 || self.y > 2732 || (self.gameInstance.santa && self.intersects(self.gameInstance.santa.boundingBox)) || (self.gameInstance.barnBoundingBox && self.intersects(self.gameInstance.barnBoundingBox))) { self.destroyMagic(); } } }; // New method to handle destruction self.destroyMagic = function () { if (self.parent) { self.parent.removeChild(self); var index = self.gameInstance.magics.indexOf(self); if (index > -1) { self.gameInstance.magics.splice(index, 1); } if (typeof self.gameInstance.activeMagicCount !== 'undefined') { self.gameInstance.activeMagicCount--; } } }; }); // ... (rest of your code) var Game = Container.expand(function () { var self = Container.call(this); // ... (rest of your Game initialization code) // Ensure that move methods of Magic instances are called in the game loop LK.on('tick', function () { self.magics.forEach(function (magic) { magic.move(); }); // Update Santa and Barn bounding boxes as needed // self.santa.updateBoundingBox(); // self.updateBarnBoundingBox(); }); // ... (rest of your Game code) }); // ... (rest of your code)
User prompt
// Assuming the 'intersects' method is implemented correctly elsewhere // ... var Magic = Container.expand(function (x, y, gameInstance) { var self = Container.call(this); self.gameInstance = gameInstance; self.moveEnabled = false; LK.setTimeout(function () { self.moveEnabled = true; self.gameInstance.magics.push(self); }, 100); // ... (rest of your Magic initialization code) self.move = function () { if (self.moveEnabled) { // ... (existing movement code) // Collision check if (self.x < 0 || self.x > 2048 || self.y < 0 || self.y > 2732 || (self.gameInstance.santa && self.intersects(self.gameInstance.santa.boundingBox)) || (self.gameInstance.barnBoundingBox && self.intersects(self.gameInstance.barnBoundingBox))) { self.destroyMagic(); } } }; // New method to handle destruction self.destroyMagic = function () { if (self.parent) { self.parent.removeChild(self); var index = self.gameInstance.magics.indexOf(self); if (index > -1) { self.gameInstance.magics.splice(index, 1); } if (typeof self.gameInstance.activeMagicCount !== 'undefined') { self.gameInstance.activeMagicCount--; } } }; }); // ... (rest of your code) var Game = Container.expand(function () { var self = Container.call(this); // ... (rest of your Game initialization code) // Ensure that move methods of Magic instances are called in the game loop LK.on('tick', function () { self.magics.forEach(function (magic) { magic.move(); }); // Update Santa and Barn bounding boxes as needed // self.santa.updateBoundingBox(); // self.updateBarnBoundingBox(); }); // ... (rest of your Game code) }); // ... (rest of your code)
User prompt
When a Magic object is destroyed, it should also be removed from the magics array in the Game object
User prompt
If Santa or the barn moves, their bounding boxes need to be updated accordingly.
User prompt
make sure badelf are on the same layer as room1
User prompt
make sure magic gets destroyed when it collides with barn
User prompt
make sure magic gets destroyed when it collides with santa
User prompt
magic is currently not being updated every tick, so because of that i have no freaking idea with what its colliding, keep track of it!
User prompt
keep track of magics movement during gameplay to make sure we know
User prompt
create a bounding box around barn and when magic collides with barn destroy magic
User prompt
create a bounding box around santa and when magic collides with it, destroy magic
User prompt
if magic collides with santa graphic, destroy magic
User prompt
if (self.barnMovedDown == true && child.intersects(self.barnBackground)) { child.destroy();
User prompt
Check if obstacle box exists, if it does and barnMovedDown is false, decrease its y position by 100.
User prompt
check if obstacle box exists, if it does and barnmoveddown is false y-=100;
User prompt
check if obstacle box exists, if it does and !barnmoveddown y-=100;
User prompt
check if obstacle box exists, if it does and barnmoveddown y+=100;
User prompt
check if obstacle box exists, if it does and barnmoveddown y+=100;
User prompt
check if obstacle box exists, if it does and !barnmoveddown y-=100;
User prompt
The collision detection between magic and the barn should be conditional based on the barn's state. The provided code does not show any such condition.
User prompt
Destroy magic if it intersects with barn when barnMovedDown is false
var ObstacleBox = Container.expand(function (x, y, gameInstance) {
var self = Container.call(this);
self.gameInstance = gameInstance;
var obstacleBoxGraphics = self.createAsset('obstacleBox', 'Obstacle Box', 0.5, 0.5);
self.x = x;
self.y = y;
});
var Magic = Container.expand(function (x, y, gameInstance) {
var self = Container.call(this);
self.gameInstance = gameInstance;
self.moveEnabled = false;
LK.setTimeout(function () {
self.moveEnabled = true;
}, 100);
self.rotation = 0;
var magicGraphics = self.createAsset('magic', 'Magic effect', 0.5, 0.5);
self.x = x;
self.y = y;
self.move = function () {
if (self.moveEnabled) {
self.rotation += 0.05;
var swirlRadius = 5;
var swirlDownwards = 0.5;
self.x += Math.cos(self.rotation) * swirlRadius + swirlDownwards;
self.y += Math.sin(self.rotation) * swirlRadius + swirlDownwards;
if (self.x < 0 || self.x > 2048 || self.y < 0 || self.y > 2732) {
if (self.parent) {
if (self.gameInstance) {
if (self.gameInstance && typeof self.gameInstance.activeMagicCount !== 'undefined') {
self.gameInstance.activeMagicCount--;
}
}
self.destroy();
}
}
}
};
self.on('down', function () {
LK.setScore(LK.getScore() + 1);
LK.gui.topCenter.children[0].setText(LK.getScore().toString());
self.gameInstance.activeMagicCount--;
self.destroy();
});
});
var Reindeer = Container.expand(function (gameInstance) {
var self = Container.call(this);
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.speed = 10;
self.direction = Math.random() < 0.5 ? 1 : -1;
self.x = self.direction === 1 ? 0 : 2048;
self.moveHorizontally = function () {
self.x += self.speed * self.direction;
if (self.x > 2048 || self.x < 0) {
self.direction *= -1;
self.scale.x = self.direction;
self.x = Math.max(0, Math.min(self.x, 2048));
}
};
self.fadeOut = function () {
if (self.alpha > 0) {
self.alpha -= 0.01;
} else {
self.gameInstance.respawnReindeer(self);
}
};
self.gameInstance = gameInstance;
var reindeerGraphics = self.createAsset('reindeer', 'Reindeer', 0.5, 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 (obj) {
LK.setScore(LK.getScore() + 25);
LK.gui.topCenter.children[0].setText(LK.getScore().toString());
var greatText = new Text2('Great!', {
size: 40,
fill: '#ffffff',
font: 'Arial Black'
});
greatText.x = self.x;
greatText.y = self.y;
greatText.anchor.set(0.5, 0.5);
self.parent.addChild(greatText);
LK.setTimeout(function () {
greatText.destroy();
}, 1000);
self.parent.respawnReindeer();
self.destroy();
});
});
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'
});
text.x = x - 400;
text.y = y + 175;
text.anchor.set(0.5, 0.5);
self.addChild(text);
LK.setTimeout(function () {
text.destroy();
self.parent.randomTextActive = false;
}, 3000);
};
});
var BadElf = Container.expand(function (spawnX, spawnY, gameInstance) {
var self = Container.call(this);
self.gameInstance = gameInstance;
self.shoot = function () {
if (self.gameInstance && self.gameInstance.santa) {
if (self.visible) {
var bullet = new ElfBullet(self.x, self.y, self.gameInstance.santa.x, self.gameInstance.santa.y, self.gameInstance);
LK.setScore(LK.getScore() + 1);
self.gameInstance.addChild(bullet);
}
}
};
self.magicShootingInterval = LK.setInterval(function () {
if (self.visible && self.gameInstance.activeMagicCount < self.gameInstance.maxMagicAllowed) {
var magic = new Magic(self.x + 125, self.y, self.gameInstance);
self.gameInstance.addChild(magic);
self.gameInstance.activeMagicCount++;
}
}, Math.random() * (6000 - 2000) + 2000);
var badElfGraphics = self.createAsset('badElf', 'Mischievous Elf', 0.5, 0.5);
self.x = spawnX;
self.y = spawnY;
var bulletStartY = self.y;
var bulletStartY = self.y - badElfGraphics.height;
self.on('down', function (obj) {
LK.setScore(LK.getScore() + 3);
LK.gui.topCenter.children[0].setText(LK.getScore().toString());
self.parent.activeBadElves--;
var obstacleBox = new ObstacleBox(self.x, self.y, self.gameInstance);
obstacleBox.x = self.x;
obstacleBox.y = self.y;
self.parent.addChild(obstacleBox);
LK.setTimeout(function () {
obstacleBox.destroy();
}, 1000);
LK.clearInterval(self.magicShootingInterval);
self.destroy();
});
});
var Mistletoe = Container.expand(function (gameInstance) {
var self = Container.call(this);
self.gameInstance = gameInstance;
var mistletoeGraphics = self.createAsset('mistletoe', 'Mistletoe', 0.5, 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 (obj) {
LK.setScore(LK.getScore() + 10);
LK.gui.topCenter.children[0].setText(LK.getScore().toString());
self.parent.respawnMistletoe(self);
});
});
var Snowflake = Container.expand(function () {
var self = Container.call(this);
var sizeFactor = Math.random() * 0.5 + 0.5;
var snowflakeGraphics = self.createAsset('snowflake', 'Snowflake', 0.5, 0.5);
snowflakeGraphics.scale.set(sizeFactor);
self.speed = -3 * sizeFactor;
self.move = 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();
}
};
});
var ElfBullet = Container.expand(function (startX, startY, targetX, targetY, gameInstance) {
var self = Container.call(this);
self.visible = true;
self.addChild(bulletGraphics);
self.gameInstance = gameInstance;
var bulletGraphics = self.createAsset('elfBullet', 'Elf Bullet', 0.5, 0.5);
bulletGraphics.anchor.set(0.5, 0.5);
self.x = startX;
self.y = startY;
var dx = targetX - self.x;
var dy = targetY - self.y;
var distance = Math.sqrt(dx * dx + dy * dy);
self.speedX = dx / distance * 0.05;
self.speedY = dy / distance * 0.05;
self.move = function () {
self.x += self.speedX;
self.y += self.speedY;
if (self.gameInstance.santa.intersects(self) && self.gameInstance.barnMovedDown) {
self.gameInstance.isGameOver = true;
}
if (self.x < 0 || self.x > 2048 || self.y < 0 || self.y > 2732) {
self.destroy();
}
};
self.on('down', function () {
self.destroy();
});
});
var Heart = Container.expand(function () {
var self = Container.call(this);
var heartGraphics = self.createAsset('heart', 'Player life', 0.5, 0.5);
self.x = heartGraphics.width / 2;
self.y = heartGraphics.height / 2;
});
var MuzzleFlash = Container.expand(function () {
var self = Container.call(this);
self.visible = false;
var flashGraphics = self.createAsset('muzzleFlash', 'Muzzle flash effect', .5, .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 Santa = Container.expand(function () {
var self = Container.call(this);
self.santaGraphics = self.createAsset('santa', 'Santa character', .5, .5);
self.move = function () {};
self.shoot = function () {};
});
var Crosshair = Container.expand(function () {
var self = Container.call(this);
self.move = function (event) {
var pos = event.getLocalPosition(self.parent);
self.x = pos.x;
self.y = pos.y;
};
var crosshairGraphics = self.createAsset('crosshair', 'Crosshair', .5, .5);
self.y = -crosshairGraphics.height / 2;
self.destroy = function () {};
});
var Game = Container.expand(function () {
var self = Container.call(this);
this.activeMagicCount = 0;
this.magicSpawnX = 1024;
this.magicSpawnY = 1366;
self.maxMagicAllowed = 5;
if (self.activeMagicCount < self.maxMagicAllowed) {
var magicInstance = new Magic(this.magicSpawnX, this.magicSpawnY, self);
self.addChild(magicInstance);
self.activeMagicCount++;
}
self.respawnReindeer = function (reindeer) {
LK.setTimeout(function () {
var newReindeer = new Reindeer(self);
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);
self.addChild(newReindeer);
LK.on('tick', function () {
newReindeer.moveHorizontally();
});
}, Math.random() < 0.5 ? 8000 : 12000);
};
self.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);
self.addChild(greatText);
LK.setTimeout(function () {
greatText.destroy();
}, 1000);
};
var silentNightText = new Text2('Silent Night', {
size: 150,
fill: "#ffffff"
});
silentNightText.anchor.set(0.5, 0);
silentNightText.x = 5 / 2;
silentNightText.y = 150;
LK.gui.topCenter.addChild(silentNightText);
self.generateSnowflakes = function () {
var snowflakeInterval = LK.setInterval(function () {
var snowflake = new Snowflake();
snowflake.x = Math.random() * 2048;
snowflake.y = Math.random() * 2732;
self.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();
self.score = 0;
self.scoreText = new Text2(self.score.toString(), {
size: 150,
fill: "#ffffff"
});
self.scoreText.anchor.set(0.5, 0);
self.scoreText.x = 5 / 2;
self.scoreText.y = 150;
LK.gui.topCenter.addChild(self.scoreText);
self.updateScore = function (score) {
self.score += score;
self.scoreText.setText(self.score.toString());
LK.setScore(self.score);
};
}
}, fadeOutDuration * fadeOutStep);
self.spawnBadElf();
LK.setInterval(self.spawnBadElf, Math.random() * (6000 - 3000) + 3000);
self.generateMistletoes = function () {};
self.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;
self.addChild(newMistletoe);
}, 8000);
};
LK.setTimeout(function () {
var reindeer = new Reindeer(self);
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);
self.addChild(reindeer);
LK.on('tick', function () {
if (reindeer) reindeer.moveHorizontally();
});
}, 12000);
LK.setTimeout(self.generateMistletoes, 8000);
}, 2000);
stage.on('move', function (obj) {
crosshair.move(obj.event);
});
stage.on('down', function (obj) {
if (hearts.length > 0) {
muzzleFlash.show();
leftClickPressed = true;
lastClickTime = LK.ticks;
if (!barnMovedDown) {
self.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 (!self.randomTextActive) {
self.randomTextActive = true;
var randomText = new RandomText();
randomText.display(santa.x, santa.y - santa.santaGraphics.height / 2, messages);
self.addChild(randomText);
}
}
}
var heart = hearts.pop();
heart.destroy();
}
self.children.forEach(function (child) {
if (child instanceof BadElf && leftClickPressed && LK.ticks - lastClickTime > 30) {
child.y -= 100;
}
});
});
var room1Background = self.createAsset('Room1', 'Room1 background', 0, 0);
room1Background.anchor.set(0.5, 0.5);
room1Background.x = 2048 / 2;
room1Background.y = 2732 / 2;
self.addChild(room1Background);
var tireBackground = self.createAsset('Tire', 'Tire background', 0.5, 0.5);
tireBackground.anchor.set(0.5, 0.5);
tireBackground.x = 700;
tireBackground.y = 1825;
self.addChild(tireBackground);
self.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;
self.addChild(newMistletoe);
}, Math.random() * (10000 - 5000) + 5000);
};
self.generateSnowflakes();
var missBackground = self.createAsset('Miss', 'Miss background', 0, 0);
missBackground.anchor.set(0.5, 0.5);
missBackground.x = 700;
missBackground.y = 2520;
var crateBackground = self.createAsset('Crate', 'Crate background', 0, 0);
crateBackground.anchor.set(0, 1);
crateBackground.x = 205;
crateBackground.y = 2645;
self.addChild(crateBackground);
var boxBackground = self.createAsset('Box', 'Box background', 0, 0);
boxBackground.anchor.set(0, 1);
boxBackground.x = 1350;
boxBackground.y = 2200;
self.addChild(boxBackground);
var barnBackground = self.createAsset('Barn', 'Barn background', 0, 0);
barnBackground.anchor.set(0.5, 0.5);
barnBackground.x = 2048 / 2;
barnBackground.y = 2732 - barnBackground.height / 4 + 900;
self.addChild(barnBackground);
self.addChild(missBackground);
var santa = new Santa();
santa.x = 2048 - santa.santaGraphics.width / 2;
santa.y = 2732 - santa.santaGraphics.height / 2;
self.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
}];
var usedSpawnLocations = [];
var spawnLocationCounter = 0;
self.activeBadElves = 0;
self.spawnBadElf = function () {
if (self.scoreText && self.activeBadElves < 2) {
if (usedSpawnLocations.length === spawnLocations.length) {
usedSpawnLocations = [];
spawnLocationCounter = 0;
}
var availableLocations = spawnLocations.filter(function (location, index) {
return usedSpawnLocations.indexOf(index) === -1;
});
var locationIndex = Math.floor(Math.random() * availableLocations.length);
var location = availableLocations[locationIndex];
usedSpawnLocations.push(spawnLocations.indexOf(location));
spawnLocationCounter++;
var badElf = new BadElf(location.x, location.y, self);
var scaleModifier = Math.random() * 0.25 + 0.75;
badElf.scale.set(scaleModifier, scaleModifier);
self.addChild(badElf);
var magic = new Magic(badElf.x + badElf.width / 2, badElf.y, self);
self.addChild(magic);
self.activeBadElves++;
var bulletStartY = badElf.y - badElf.height;
if (badElf) {
if (badElf) {
if (badElf) {
if (badElf) {
if (badElf) {
if (badElf && self.santa) {
self.addChild(new ElfBullet(badElf.x, bulletStartY, self.santa.x, self.santa.y, self));
}
}
}
self.addChild(bullet);
}
self.addChild(bullet);
}
}
self.addChild(bullet);
if (badElf && self.santa) {
var bullet = new ElfBullet(badElf.x, bulletStartY, self.santa.x, self.santa.y, self);
self.addChild(bullet);
self.activeBadElves++;
}
}
};
var muzzleFlash = new MuzzleFlash();
muzzleFlash.x = santa.x - santa.santaGraphics.width + 400;
muzzleFlash.y = santa.y - 90;
self.addChild(muzzleFlash);
self.addChild(santa);
var crosshair = self.addChild(new Crosshair());
crosshair.x = 2048 / 2;
crosshair.y = 2732 / 2;
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();
for (var i = 0; i < self.children.length; i++) {
var child = self.children[i];
if (child instanceof Snowflake) {
child.move();
} else if (child instanceof Mistletoe) {
child.bob();
} else if (child instanceof Magic) {
child.move();
if (!self.barnMovedDown && child.intersects(self.barnBackground)) {
child.destroy();
}
}
}
if (isGameOver) {
LK.effects.flashScreen(0xff0000, 1000);
LK.showGameOver();
}
if (leftClickPressed && LK.ticks - lastClickTime > 30) {
barnBackground.y -= 460;
room1Background.y -= 100;
boxBackground.y -= 100;
crateBackground.y -= 100;
missBackground.y -= 460;
tireBackground.y -= 100;
self.children.forEach(function (child) {
if (child instanceof BadElf && barnMovedDown) {
child.y -= 100;
}
});
leftClickPressed = false;
barnMovedDown = false;
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