User prompt
if click is longer than half a second then don't drop present
User prompt
drop present on click
User prompt
If single tap is longer than one second then the present should not be shot.
User prompt
Single tap to drop present
User prompt
Double tap to drop present
User prompt
Fix Bug: 'Uncaught TypeError: Cannot read properties of undefined (reading 'maxTouchPoints')' in this line: 'if (('ontouchstart' in window) || navigator.maxTouchPoints && navigator.maxTouchPoints > 0) {' Line Number: 272
User prompt
Fix Bug: 'Cannot read properties of undefined (reading 'maxTouchPoints')' in this line: 'if (('ontouchstart' in window) || navigator.maxTouchPoints) {' Line Number: 272
User prompt
Fix Bug: 'Uncaught TypeError: Cannot read properties of undefined (reading 'maxTouchPoints')' in this line: 'if (('ontouchstart' in window) || navigator.maxTouchPoints) {' Line Number: 272
User prompt
Fix Bug: 'Uncaught TypeError: LK.isMobile is not a function' in this line: 'if (LK.isMobile()) {' Line Number: 272
User prompt
On mobile only drop presents on tap
User prompt
Check if player is touching and dragging santa. While draging santa present should not be shot. Present should be shot on tap
User prompt
Santa should not shoot presents if the player is holding the touch
User prompt
Fix Bug: 'Uncaught TypeError: LK.isMobile is not a function' in this line: 'if (LK.isMobile()) {' Line Number: 274
User prompt
On mobile devices santa should auto shoot presents
User prompt
replace text of presents display by icons
User prompt
Fix Bug: 'Uncaught ReferenceError: presentIconSpacing is not defined' in this line: 'presentIcon.x = presentIconSpacing + 50 + i * (lifeIconSize + lifeIconSpacing);' Line Number: 159
User prompt
start game with 5 presents
User prompt
replace present counter by present icons
User prompt
Fix Bug: 'Uncaught ReferenceError: presentIconSpacing is not defined' in this line: 'presentIcon.x = presentIconSpacing + 50 + i * (lifeIconSize + lifeIconSpacing);' Line Number: 148
User prompt
Fix Bug: 'Uncaught TypeError: Cannot set properties of undefined (setting 'updatePresentIcons')' in this line: 'self.updatePresentIcons = function () {' Line Number: 115
User prompt
replace present counter by icons
User prompt
also increase the speed of the chimneys as the game progresses
User prompt
remove presentdeliveryeffect
User prompt
move pressettopper closer to chimeny
User prompt
presentTopper has to be 1 pixel apart from the chimney
var PresentTopper = Container.expand(function (speed) {
var self = Container.call(this);
var topperGraphics = self.createAsset('presentTopper', 'Present Topper', 0.5, 1);
self.speed = speed;
self.move = function () {
self.x -= self.speed;
};
});
var RandomMover = Container.expand(function () {
var self = Container.call(this);
var moverGraphics = self.createAsset('randomMover', 'Random Mover', 0.5, 0.5);
self.speedX = (Math.random() * 4 - 2) * 4;
self.speedY = (Math.random() * 4 - 2) * 4;
self.move = function () {
self.x += self.speedX;
self.y += self.speedY;
if (self.x < 0 || self.x > 2048) {
self.speedX *= -1;
}
if (self.y < 0 || self.y > 2732) {
self.speedY *= -1;
}
};
});
var PresentDeliveryEffect = Container.expand(function () {
var self = Container.call(this);
var effectGraphics = self.createAsset('presentDeliveryEffect', 'Present Delivery Effect', 0.5, 0.5);
self.animate = function () {
self.alpha = 1;
var fadeOut = function () {
if (self.alpha > 0) {
self.alpha -= 0.05;
LK.setTimeout(fadeOut, 50);
} else {
self.destroy();
}
};
fadeOut();
};
});
var LifeIcon = Container.expand(function () {
var self = Container.call(this);
var lifeIconGraphics = self.createAsset('lifeIcon', 'Life Icon', 0.5, 0.5);
});
var Star = Container.expand(function () {
var self = Container.call(this);
var starGraphics = self.createAsset('star', 'Star', 0.5, 0.5);
self.speed = 2 + Math.random() * 3;
self.move = function () {
self.x -= self.speed;
if (self.x < -self.width) {
self.destroy();
return true;
}
return false;
};
});
var Santa = Container.expand(function () {
var self = Container.call(this);
self.resetPresents = function () {
this.presentCounter = 5;
this.parent.presentCounterTxt.setText(this.presentCounter.toString());
};
var santaGraphics = self.createAsset('santa', 'Santa character', .5, .5);
self.move = function (pos) {
self.x += (pos.x - self.x) * 0.1;
self.y += (pos.y - self.y) * 0.1;
};
self.throwPresent = function () {
if (this.presentCounter > 0) {
var present = new Present();
present.x = this.x;
present.y = this.y;
this.parent.addChild(present);
this.parent.presents.push(present);
this.presentCounter--;
this.parent.presentCounterTxt.setText(this.presentCounter.toString());
}
if (this.presentCounter === 0) {
this.parent.hazardSpeed *= 1.5;
this.parent.hazardSpawnRate = Math.max(this.parent.hazardSpawnRate * 0.8, 20);
this.parent.rudolph.visible = true;
} else {
this.parent.rudolph.visible = false;
}
};
});
var Present = Container.expand(function () {
var self = Container.call(this);
var presentGraphics = self.createAsset('present', 'Present', .5, .5);
self.move = function (hazards) {
this.y += 5;
hazards.forEach((function (hazard) {
if (this.intersects(hazard)) {
LK.effects.flashObject(this, 0xff0000, 300);
LK.setTimeout((function () {
this.destroy();
}).bind(this), 300);
}
}).bind(this));
};
});
var Chimney = Container.expand(function () {
var self = Container.call(this);
var chimneyGraphics = self.createAsset('chimney', 'Chimney', .5, .5);
self.originalTint = 0xFFFFFF;
self.presentDeliveredTint = 0x808080;
self.hasPresent = false;
self.speed = 2;
self.move = function () {
self.x -= self.speed;
if (self.x < -self.width) {
self.x = 2048;
}
};
self.checkCollision = function () {};
});
var Hazard = Container.expand(function () {
var self = Container.call(this);
var hazardGraphics = self.createAsset('hazard', 'Hazard', .5, .5);
self.move = function () {
self.x -= self.speed;
if (self.x < -self.width) {
self.destroy();
return true;
}
return false;
};
});
var Game = Container.expand(function () {
var self = Container.call(this);
self.toppers = [];
self.stars = [];
var starSpawnRate = 15;
var starSpawnCounter = 0;
var santa = self.addChild(new Santa());
santa.x = 2048 / 2;
santa.y = 2732 / 2;
self.rudolph = self.addChild(new RandomMover());
self.rudolph.x = Math.random() * 2048;
self.rudolph.y = Math.random() * 2732;
self.rudolph.visible = false;
santa.lives = 3;
self.lifeIcons = [];
var lifeIconSpacing = 20;
var lifeIconSize = 64;
for (var i = 0; i < santa.lives; i++) {
var lifeIcon = new LifeIcon();
lifeIcon.x = lifeIconSpacing + 50 + i * (lifeIconSize + lifeIconSpacing);
lifeIcon.y = lifeIconSpacing + 50;
self.lifeIcons.push(lifeIcon);
LK.gui.topLeft.addChild(lifeIcon);
}
santa.presentCounter = 5;
self.presents = [];
var chimneys = [];
var hazards = [];
var hazardSpeed = 8;
var hazardSpawnRate = 80;
var hazardSpawnCounter = 0;
var rudolphSpawnCounter = 0;
var scoreTxt = new Text2('0', {
size: 150,
fill: "#ffffff"
});
var presentIcon = self.createAsset('presentIcon', 'Present Icon', 0.5, 0);
presentIcon.x = 60;
presentIcon.y = self.lifeIcons[self.lifeIcons.length - 1].y + lifeIconSize + lifeIconSpacing;
LK.gui.topLeft.addChild(presentIcon);
var presentCounterTxt = new Text2(santa.presentCounter.toString(), {
size: 80,
fill: "#ffffff"
});
presentCounterTxt.x = presentIcon.x + presentIcon.width + 10;
presentCounterTxt.y = presentIcon.y;
self.presentCounterTxt = presentCounterTxt;
LK.gui.topLeft.addChild(presentCounterTxt);
var maxChimneys = 5;
LK.on('tick', function () {
self.toppers = self.toppers.filter(function (topper) {
return topper.x + topper.width > 0;
});
self.toppers.forEach(function (topper) {
topper.move();
});
if (starSpawnCounter++ >= starSpawnRate) {
var newStar = new Star();
newStar.x = 2048;
newStar.y = Math.random() * (2732 * 0.8);
self.stars.push(newStar);
self.addChild(newStar);
starSpawnCounter = 0;
}
if (chimneys.length < maxChimneys) {
var lastChimney = chimneys[chimneys.length - 1];
var chimneySpacing = 500;
if (!lastChimney || lastChimney.x < 2048 - chimneySpacing) {
var newChimney = new Chimney();
newChimney.x = 2048;
newChimney.y = 2732 - newChimney.height - Math.random() * 500 + 750;
chimneys.push(newChimney);
self.addChild(newChimney);
}
}
chimneys.forEach(function (chimney) {
chimney.move();
self.presents.forEach(function (present, index) {
if (present.intersects(chimney) && !chimney.hasPresent) {
present.destroy();
self.presents.splice(index, 1);
chimney.hasPresent = true;
chimney.tint = chimney.presentDeliveredTint;
var deliveryEffect = new PresentDeliveryEffect();
deliveryEffect.x = chimney.x;
deliveryEffect.y = chimney.y - chimney.height / 2;
self.addChild(deliveryEffect);
deliveryEffect.animate();
var newScore = LK.getScore() + 1;
LK.setScore(newScore);
scoreTxt.setText(newScore.toString());
var presentTopper = new PresentTopper(chimney.speed);
presentTopper.x = chimney.x;
presentTopper.y = chimney.y - chimney.height + 1;
self.addChild(presentTopper);
self.toppers.push(presentTopper);
}
});
});
chimneys = chimneys.filter(function (chimney) {
return chimney.x + chimney.width > 0;
});
});
scoreTxt.anchor.set(.5, 0);
LK.gui.topCenter.addChild(scoreTxt);
LK.on('tick', function () {
for (var i = 0; i < self.presents.length; i++) {
self.presents[i].move(hazards);
}
for (var i = 0; i < chimneys.length; i++) {
chimneys[i].checkCollision();
}
if (hazardSpawnCounter++ >= hazardSpawnRate) {
var newHazard = new Hazard();
newHazard.x = 2048;
newHazard.y = Math.random() * (2732 * 0.6) + 2732 * 0.2;
newHazard.speed = hazardSpeed;
hazards.push(newHazard);
self.addChild(newHazard);
hazardSpawnCounter = 0;
}
hazards = hazards.filter(function (hazard) {
return !hazard.move();
});
var santaHit = false;
hazards.forEach(function (hazard, index) {
if (!santaHit && santa.intersects(hazard)) {
LK.effects.flashObject(santa, 0xff0000, 500);
hazard.destroy();
hazards.splice(index, 1);
santaHit = true;
santa.lives--;
if (self.lifeIcons.length > santa.lives) {
var removedLifeIcon = self.lifeIcons.pop();
removedLifeIcon.destroy();
}
if (santa.lives <= 0) {
LK.showGameOver();
}
}
});
hazards = hazards.filter(function (hazard) {
return !hazard.hitSanta;
});
self.stars = self.stars.filter(function (star) {
return !star.move();
});
self.rudolph.move();
if (santa.intersects(self.rudolph)) {
santa.resetPresents();
self.rudolph.visible = false;
}
});
stage.on('move', function (obj) {
var pos = obj.event.getLocalPosition(self);
if (pos.y < 2732 * 0.8 && pos.y > 2732 * 0.2) {
santa.move(pos);
}
});
stage.on('up', function (obj) {
santa.throwPresent();
});
});
8-bit cloud with lightning. in game asset. white cloude. yellow lighning. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
8 bit x mas pressent. in game asset. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
8-bit. cartoon. santa on sledge. smiling. in game asset. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.