var MovingAsset = Container.expand(function (assetId) {
var self = Container.call(this);
var movingAssetGraphics = self.createAsset(assetId, 'Moving Asset Graphics', 0, 0.5);
self.x = -movingAssetGraphics.width;
self.y = 2732 * 0.1;
self.move = function () {
self.x += 5;
if (self.x > 2048) {
self.destroy();
}
};
LK.on('tick', self.move);
});
var CatchPresentsDisplay = Container.expand(function () {
var self = Container.call(this);
self.x = 10;
self.y = 10;
self.catchPresentsList = [];
self.displayLimit = LevelManager.getCurrentLevel();
self.updateList = function (catchPresents) {
self.catchPresentsList = catchPresents.slice(0, self.displayLimit);
self.removeChildren();
if (self.catchPresentsList.length > 0) {
var randomIndex = Math.floor(Math.random() * self.catchPresentsList.length);
var presentAsset = self.createAsset(self.catchPresentsList[randomIndex].type, self.catchPresentsList[randomIndex].type + ' Graphics', 0.5, 0.5);
var presentText = new Text2(self.catchPresentsList[randomIndex].name, {
size: 65,
fill: '#000000',
font: "Comic Sans MS"
});
presentText.anchor.set(0.5, 0.5);
presentText.y = 140;
self.addChild(presentText);
var particleEffect = new ParticleEffect();
particleEffect.x = 0;
particleEffect.y = 70;
self.addChild(particleEffect);
particleEffect.emit('particleAsset', 10, 6, 0.8, 0.03);
var gameInstance = this.parent;
gameInstance.currentCatchPresent = self.catchPresentsList[randomIndex];
}
};
});
var PopupTextBox = Container.expand(function (message) {
var self = Container.call(this);
self.interactive = true;
self.on('down', function () {
self.parent.initialized = true;
self.parent.levelTimer = 0;
self.destroy();
});
var textBoxBg = self.createAsset('BoxBg', 'Box Background', 0.5, 0.5);
textBoxBg.width = 2048;
textBoxBg.height = 2732;
textBoxBg.x = 2048 / 2;
textBoxBg.y = 2732 / 2;
self.addChild(textBoxBg);
var movingAsset = self.addChild(new MovingAsset('movingAssetId'));
var background = self.createAsset('background', 'Background Image', 0.0, 0.0);
background.width = 2048;
background.height = 2732;
background.y = 0;
self.addChild(background);
var textBoxBg = self.createAsset('textBoxBg', 'Text Box Background', 0.5, 0.5);
textBoxBg.width = 1200;
textBoxBg.height = 1200;
textBoxBg.x = 2048 / 2;
textBoxBg.y = 2732 / 2;
self.addChild(textBoxBg);
var secondImage = self.createAsset('secondImageAsset', 'Second Image', 0.5, 0.5);
secondImage.x = 2048 / 2 + 280;
secondImage.y = 2732 / 2 + 220;
var text = new Text2(message, {
size: 70,
fill: '#000000',
font: "Comic Sans MS",
anchor: {
x: 0.5,
y: 0.5
}
});
text.alpha = 0;
text.x = 700;
text.y = 2732 / 2 - 370;
LK.on('tick', function () {
if (text.alpha < 1) text.alpha += 0.004;
});
self.addChild(text);
secondImage.alpha = 0;
LK.on('tick', function () {
if (secondImage.alpha < 1) secondImage.alpha += 0.003;
});
self.addChild(secondImage);
});
var ParticleEffect = Container.expand(function () {
var self = Container.call(this);
self.emit = function (assetId, count, speed, scale, alphaDecay) {
for (var i = 0; i < count; i++) {
var particle = new Particle(assetId, speed, scale, alphaDecay);
particle.x = self.x;
particle.y = self.y;
self.addChild(particle);
}
};
});
var Particle = Container.expand(function (assetId, speed, scale, alphaDecay) {
var self = Container.call(this);
var particleGraphics = self.createAsset(assetId, 'Particle Graphics', 0.5, 0.5);
particleGraphics.rotation = Math.random() * Math.PI * 2;
particleGraphics.scale.x = scale;
particleGraphics.scale.y = scale;
self.vx = Math.random() * speed - speed / 2;
self.vy = Math.random() * speed - speed / 2;
self.alpha = 1;
self.lifetime = 60;
self.tick = function () {
self.x += self.vx;
self.y += self.vy;
self.alpha -= alphaDecay;
if (self.alpha <= 0) self.destroy();
};
LK.on('tick', self.tick);
});
var BonusItem = Container.expand(function () {
var self = Container.call(this);
self.speed = 6;
self.rotationSpeed = (Math.random() - 0.8) * 0.1;
self.bounce = 1;
self.gravity = 0.1;
self.vx = self.speed;
self.vy = self.speed;
BonusItem.prototype.startDestructionTimer = function (resetBonusTimerCallback) {
var self = this;
var destructionTimeout = LK.setTimeout(function () {
self.destroy();
resetBonusTimerCallback();
}, 10000);
self.destructionTimeout = destructionTimeout;
};
self.interactive = true;
self.bonusAmount = Math.floor(Math.random() * (10 - 4 + 1)) + 4;
var bonusGraphics = self.createAsset('bonusItem', 'Bonus Item Graphics', 0.5, 0.5);
self.vx = (Math.random() > 0.5 ? 1 : -1) * (Math.random() * 2 + 1);
self.on('down', function () {
var gameInstance = this.parent.parent;
gameInstance.score += self.bonusAmount;
gameInstance.scoreDisplay.updateScore(gameInstance.score);
LK.clearTimeout(self.destructionTimeout);
self.destroy();
gameInstance.resetBonusTimer();
});
self.move = function () {
self.x += self.vx;
self.y += self.vy;
self.rotation += self.rotationSpeed;
if (self.x < 0 || self.x > 2048) {
self.vx = -self.vx * self.bounce;
}
if (self.y < 0 || self.y > 2732) {
self.vy = -self.vy * self.bounce;
}
};
});
var LifeCounter = Container.expand(function (initialLives) {
var self = Container.call(this);
var lifeCounterBg = self.createAsset('lifeCounterBg', 'Life Counter Background', 0.5, 0.5);
lifeCounterBg.x = 1710;
lifeCounterBg.y = 190;
lifeCounterBg.alpha = 0.2;
self.addChild(lifeCounterBg);
self.refreshLifeDisplay = function () {
while (self.lifeIcons.length > self.lives) {
var lifeToRemove = self.lifeIcons.pop();
lifeToRemove.destroy();
}
for (var i = 0; i < self.lifeIcons.length; i++) {
self.lifeIcons[i].x = 1948 - i * (self.lifeIcons[i].width + 10);
}
};
self.lives = initialLives;
self.lifeIcons = [];
for (var i = 0; i < self.lives; i++) {
var lifeIcon = self.createAsset('lifeIcon', 'Life Icon', 0.5, 0.5);
lifeIcon.x = 1948 - i * (lifeIcon.width + 10);
lifeIcon.y = 250;
self.lifeIcons.push(lifeIcon);
self.addChild(lifeIcon);
}
self.removeLife = function () {
if (self.lives > 0) {
self.lives--;
self.refreshLifeDisplay();
if (self.lives === initialLives - 1) {
var reminderPopup = new PopupTextBox('You need to match\nthe present you\nclick with the one\ndisplayed at the\ntop of the\nscreen or you\nwill lose lifes!');
self.parent.addChild(reminderPopup);
}
if (self.lives <= 0) {
LK.showGameOver();
}
}
};
self.resetLives = function () {
while (self.lifeIcons.length < initialLives) {
var lifeIcon = self.createAsset('lifeIcon', 'Life Icon', 0.5, 0.5);
lifeIcon.x = 1948 - (initialLives - self.lifeIcons.length - 1) * (lifeIcon.width + 10);
lifeIcon.y = 250;
self.lifeIcons.push(lifeIcon);
self.addChild(lifeIcon);
}
self.lives = initialLives;
};
});
var Background = Container.expand(function () {
var self = Container.call(this);
var background = self.createAsset('background', 'Background Image', 0, 0);
background.width = 2048;
background.height = 2732;
self.addChild(background);
});
var RotatingBackground = Container.expand(function () {
var self = Container.call(this);
var rotatingImage = self.createAsset('rotatingBackground', 'Rotating Background Image', 0.5, 0.5);
rotatingImage.x = 2048 / 2;
rotatingImage.y = 2732 / 2;
self.addChild(rotatingImage);
self.rotationSpeed = 0.0003;
});
var Present = Container.expand(function (type) {
var self = Container.call(this);
self.type = type;
self.applyGravity = function () {
var level = LevelManager.getCurrentLevel() - 1;
var gravity = levelParameters[level].gravity;
self.vy += gravity;
};
var presentGraphics = self.createAsset(type, type + ' Graphics', .5, .5);
self.vx = (Math.random() - 0.5) * 10;
self.vy = (Math.random() - 0.5) * 10;
self.rotationSpeed = (Math.random() - 0.5) * 0.2;
self.interactive = true;
self.on('down', function () {
var gameInstance = this.parent.parent;
var displayedPresentType = gameInstance.currentCatchPresent ? gameInstance.currentCatchPresent.type : null;
if (self.type === displayedPresentType) {
gameInstance.score++;
gameInstance.scoreDisplay.updateScore(gameInstance.score);
gameInstance.presents.splice(gameInstance.presents.indexOf(self), 1);
gameInstance.CatchPresents.splice(gameInstance.CatchPresents.findIndex(p => p.type === displayedPresentType), 1);
gameInstance.catchPresentsDisplay.updateList(gameInstance.CatchPresents);
self.destroy();
} else {
gameInstance.lifeCounter.removeLife();
}
});
self.move = function () {
self.applyMovement();
};
self.applyMovement = function () {
var levelIndex = LevelManager.getCurrentLevel() - 1;
var level = levelParameters[Math.max(0, Math.min(levelIndex, levelParameters.length - 1))];
var presentSpeedFactor = level.presentSpeedFactor;
self.x += self.vx * presentSpeedFactor;
self.y += self.vy * presentSpeedFactor;
self.rotation += self.rotationSpeed;
self.applyBounds();
};
self.applyBounds = function () {
var mainContainer = self.parent;
if (self.x < 0) {
self.x = 0;
self.vx = -self.vx;
}
if (mainContainer && self.x > mainContainer.width - self.width) {
self.x = mainContainer.width - self.width;
self.vx = -self.vx;
}
if (self.y < 0) {
self.y = 0;
self.vy = -self.vy;
}
if (mainContainer && self.y > mainContainer.height - self.height) {
self.y = mainContainer.height - self.height;
self.vy = -self.vy;
}
};
self.bounce = function (collisionNormal) {
self.applyBounce(collisionNormal);
};
self.applyBounce = function (collisionNormal) {
var level = LevelManager.getCurrentLevel() - 1;
var bounceFactor = levelParameters[level].bounceFactor;
if (collisionNormal.x !== 0) {
self.vx = -self.vx * bounceFactor;
}
if (collisionNormal.y !== 0) {
self.vy = -self.vy * bounceFactor;
}
};
});
var MainContainer = Container.expand(function () {
var self = Container.call(this);
self.width = 1942;
self.height = 1900;
self.x = 50;
self.y = 400;
var background = self.createAsset('whiteBackground', 'White Background', 0, 0);
background.width = self.width;
background.height = self.height;
background.alpha = 0.01;
self.addChild(background);
});
var SantaSack = Container.expand(function () {
var self = Container.call(this);
var sackGraphics = self.createAsset('santaSack', 'Santa Toy Sack', 0.5, 1);
self.x = 2048 / 2;
self.y = 3200;
});
var ScoreDisplay = Container.expand(function (initialScore) {
var self = Container.call(this);
self.scoreText = new Text2(initialScore, {
size: 100,
fill: "#ffffff",
weight: 800,
dropShadow: true,
dropShadowColor: '#ff0000',
dropShadowAngle: Math.PI / 6,
dropShadowDistance: 5
});
self.scoreText.anchor.set(.5, 0);
self.addChild(self.scoreText);
self.updateScore = function (newScore) {
self.scoreText.setText(newScore);
};
});
var nameStorage = ['James', 'Mary', 'John', 'Pat', 'Robert', 'Jenni', 'Michael', 'Linda', 'William', 'Elizabeth', 'David', 'Barbara', 'Richard', 'Susan', 'Joseph', 'Jessica', 'Thomas', 'Sarah', 'Charles', 'Karen', 'Chris', 'Nancy', 'Daniel', 'Lisa', 'Matthew', 'Margaret', 'Anthony', 'Betty', 'Mark', 'Sandra', 'Donald', 'Ashley', 'Steven', 'Kimberly', 'Paul', 'Emily', 'Andrew', 'Donna', 'Joshua', 'Michelle', 'Kenneth', 'Dorothy', 'Kevin', 'Carol', 'Brian', 'Amanda', 'George', 'Melissa', 'Edward', 'Stephanie'];
var LevelManager = (function () {
var currentLevel = 1;
var maxLevel = 20;
function getNextLevel() {
currentLevel++;
return currentLevel;
}
function resetLevels() {
currentLevel = 1;
}
return {
getNextLevel: getNextLevel,
resetLevels: resetLevels,
getCurrentLevel: function () {
return currentLevel;
}
};
})();
var levelParameters = [{
presentSpeedFactor: 2,
bounceFactor: 0.6,
gravity: 0.1
}, {
presentSpeedFactor: 2.2,
bounceFactor: 0.65,
gravity: 0.12
}, {
presentSpeedFactor: 2.4,
bounceFactor: 0.7,
gravity: 0.14
}, {
presentSpeedFactor: 2.6,
bounceFactor: 0.75,
gravity: 0.16
}, {
presentSpeedFactor: 2.8,
bounceFactor: 0.8,
gravity: 0.18
}, {
presentSpeedFactor: 3.0,
bounceFactor: 0.85,
gravity: 0.2
}, {
presentSpeedFactor: 3.2,
bounceFactor: 0.9,
gravity: 0.22
}, {
presentSpeedFactor: 3.4,
bounceFactor: 0.9,
gravity: 0.24
}, {
presentSpeedFactor: 3.6,
bounceFactor: 0.95,
gravity: 0.26
}, {
presentSpeedFactor: 3.7,
bounceFactor: 0.8,
gravity: 0.28
}, {
presentSpeedFactor: 3.8,
bounceFactor: 0.8,
gravity: 0.3
}, {
presentSpeedFactor: 3.9,
bounceFactor: 0.8,
gravity: 0.32
}, {
presentSpeedFactor: 4,
bounceFactor: 0.8,
gravity: 0.34
}, {
presentSpeedFactor: 4.1,
bounceFactor: 0.8,
gravity: 0.36
}, {
presentSpeedFactor: 4.2,
bounceFactor: 0.8,
gravity: 0.38
}, {
presentSpeedFactor: 4.3,
bounceFactor: 0.8,
gravity: 0.4
}, {
presentSpeedFactor: 4.4,
bounceFactor: 0.8,
gravity: 0.42
}, {
presentSpeedFactor: 4.5,
bounceFactor: 0.8,
gravity: 0.44
}, {
presentSpeedFactor: 4.6,
bounceFactor: 0.8,
gravity: 0.46
}, {
presentSpeedFactor: 4.7,
bounceFactor: 0.8,
gravity: 0.48
}];
var Game = Container.expand(function () {
var self = Container.call(this);
self.levelTimer = 0;
self.levelTimeBonus = function () {
var bonusMultiplier = 1 + 0.25 * (presentTypesCount - 2);
var bonus = Math.floor(Math.min(Math.max(0, (60 + 10 * (self.levelManager.getCurrentLevel() - 1) - self.levelTimer) * bonusMultiplier), 600));
self.score += bonus;
self.scoreDisplay.updateScore(self.score);
self.showBonusPopup(bonus);
};
self.showBonusPopup = function (bonus) {
var bonusPopup = new PopupTextBox('\n\nLevel ' + self.levelManager.getCurrentLevel() + ' Complete.\nTime Bonus: ' + bonus);
self.addChild(bonusPopup);
};
LK.on('tick', function () {
if (!self.initialized) return;
self.levelTimer += 1 / 60;
});
self.initialized = false;
self.createBonusItem = function (mainContainer) {
var bonusItem = new BonusItem();
bonusItem.x = Math.random() * (mainContainer.width - bonusItem.width) + mainContainer.x;
bonusItem.y = Math.random() * (mainContainer.height - bonusItem.height) + mainContainer.y;
mainContainer.addChild(bonusItem);
bonusItem.startDestructionTimer(self.resetBonusTimer);
self.bonusItem = bonusItem;
};
self.resetBonusTimer = function () {
LK.clearTimeout(bonusItemTimeout);
bonusItemTimeout = LK.setTimeout(function () {
self.createBonusItem(mainContainer);
}, (Math.random() * (120 - 60) + 60) * 1000);
};
var bonusItemTimeout = LK.setTimeout(function () {
self.createBonusItem(mainContainer);
}, (Math.random() * (120 - 60) + 60) * 1000);
LK.on('tick', function () {
if (!self.initialized) return;
if (self.bonusItem) {
self.bonusItem.move();
}
});
self.presents = [];
self.levelManager = LevelManager;
var rotatingBackground = new RotatingBackground();
self.addChild(rotatingBackground, 0);
LK.on('tick', function () {
rotatingBackground.children[0].rotation += rotatingBackground.rotationSpeed;
});
var background = new Background();
self.addChildAt(background, 1);
var santaSack = new SantaSack();
self.addChild(santaSack);
var mainContainer = new MainContainer();
self.addChild(mainContainer);
var scroll = self.createAsset('newImageAsset', 'Scroll', 0.5, 0.5);
scroll.x = 950;
scroll.y = 230;
self.addChild(scroll);
var catchPresentsDisplay = new CatchPresentsDisplay();
self.addChild(catchPresentsDisplay);
self.catchPresentsDisplay = catchPresentsDisplay;
self.currentCatchPresent = null;
catchPresentsDisplay.x = 960;
catchPresentsDisplay.y = 180;
self.lifeCounter = new LifeCounter(5);
self.addChild(self.lifeCounter);
self.score = 0;
var score = self.score;
var scoreTxtXAdjust = 1500;
var scoreTxtYAdjust = 50;
self.score = 0;
self.levelManager.resetLevels();
self.currentLevelTxt = new Text2('LV' + self.levelManager.getCurrentLevel(), {
size: 100,
fill: "#ffffff",
weight: 800,
dropShadow: true,
dropShadowColor: '#ff0000',
dropShadowAngle: Math.PI / 6,
dropShadowDistance: 3
});
self.currentLevelTxt.anchor.set(0.5, 0);
self.currentLevelTxt.x = 1850;
self.currentLevelTxt.y = 50;
self.addChild(self.currentLevelTxt);
self.scoreDisplay = self.addChild(new ScoreDisplay(self.score));
self.scoreDisplay.scoreText.anchor.set(.5, 0);
self.scoreDisplay.x = scoreTxtXAdjust;
self.scoreDisplay.y = scoreTxtYAdjust;
var popupTextBox = new PopupTextBox('A silly elf has spilt\nmagic dust in the\npresent sack causing\nthe presents to\nfloat away!\nCan you catch\nthem all!');
self.addChildAt(popupTextBox, self.children.length);
var level = self.levelManager.getCurrentLevel();
var presentTypesCount = 2;
if (level >= 3 && level <= 4) {
presentTypesCount = 3;
} else if (level >= 5 && level <= 6) {
presentTypesCount = 4;
} else if (level >= 7 && level <= 8) {
presentTypesCount = 5;
} else if (level >= 9 && level <= 10) {
presentTypesCount = 6;
} else if (level >= 11 && level <= 12) {
presentTypesCount = 7;
} else if (level >= 13 && level <= 14) {
presentTypesCount = 8;
} else if (level >= 15 && level <= 16) {
presentTypesCount = 9;
} else if (level >= 17) {
presentTypesCount = 10;
}
self.createPresents = function (presentTypesCount, mainContainer) {
self.CatchPresents = [];
for (var i = 0; i < presentTypesCount; i++) {
var levelAdjustment = LevelManager.getCurrentLevel() > 15 ? 3 : Math.max(0, Math.floor((LevelManager.getCurrentLevel() - 11) / 2));
var numPresentsToCreate = 6 - levelAdjustment;
for (var j = 0; j < numPresentsToCreate; j++) {
var presentType = 'presentType' + (i + 1);
var presentName = nameStorage[Math.floor(Math.random() * nameStorage.length)];
var present = new Present(presentType);
present.x = Math.random() * (mainContainer.width - present.width);
present.y = Math.random() * (mainContainer.height - present.height);
mainContainer.addChild(present);
self.presents.push(present);
self.CatchPresents.push({
type: presentType,
name: presentName
});
self.CatchPresents.sort(function () {
return 0.5 - Math.random();
});
self.catchPresentsDisplay.updateList(self.CatchPresents);
}
}
};
self.createPresents(presentTypesCount, mainContainer);
LK.on('tick', function () {
for (var i = self.presents.length - 1; i >= 0; i--) {
var present = self.presents[i];
present.move();
if (present.y >= LK.stageContainer.height - present.height) {
present.y = LK.stageContainer.height - present.height;
present.vy = 0;
present.destroy();
self.presents.splice(i, 1);
self.catchPresentsDisplay.updateList(self.CatchPresents);
}
}
if (self.presents.length === 0) {
self.levelTimeBonus();
var newLevel = self.levelManager.getNextLevel();
if (newLevel > 20) {
levelParameters[19].presentSpeedFactor += 0.1;
levelParameters[19].bounceFactor += 0.05;
levelParameters[19].gravity += 0.02;
}
self.currentLevelTxt.setText('LV ' + newLevel);
self.levelTimer = 0;
var level = self.levelManager.getCurrentLevel();
var presentTypesCount = 2;
if (level >= 3 && level <= 4) {
presentTypesCount = 3;
} else if (level >= 5 && level <= 6) {
presentTypesCount = 4;
} else if (level >= 7 && level <= 8) {
presentTypesCount = 5;
} else if (level >= 9 && level <= 10) {
presentTypesCount = 6;
} else if (level >= 11 && level <= 12) {
presentTypesCount = 7;
} else if (level >= 13 && level <= 14) {
presentTypesCount = 8;
} else if (level >= 15 && level <= 16) {
presentTypesCount = 9;
} else if (level >= 17) {
presentTypesCount = 10;
}
self.createPresents(presentTypesCount, mainContainer);
}
});
});
basic snowflake. white Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
open top of Santa's sack. wrapped presents with ribbons and box, vivid colours, candy canes Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
close up of a Snow covered roof, Winter scene, star lit night sky, brick chimbly on right hand side, Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
gift wrapped box, vivid colours. with bow on top Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
gift wrapped box, vivid colours. with bow on top 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.
stary night sky.dark blue. no land. only sky 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.
gift wrapped box, vivid colours. with bow on top 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. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
gift wrapped box, vivid colours. with bow on top 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.
gift wrapped box, vivid colours. with bow on top 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.
Candy cane, vivid colours. with bow on top 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.
gift wrapped box, vivid colours. with bow on top 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.
gift wrapped box, vivid colours. with bow on top 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.
old paper scroll, blank with no writing, Single Game Texture. In-Game asset. 2d. transparent Blank background. High contrast. No shadows. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
rudolf the red nose raindeer Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
gift wrapped box, bright colours. with bow on top Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows. Single Game Texture.
gift wrapped box, bright light colours. with bow on top Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows. Single Game Texture.
Santa's sleigh with a team of reindeer moving across a star light sky. 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.