/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var PowerpuffGirl = Container.expand(function (girlType, color) {
var self = Container.call(this);
var girl = self.attachAsset(girlType, {
anchorX: 0.5,
anchorY: 0.5
});
self.activity = 'idle';
self.activityTimer = 0;
self.originalX = 0;
self.originalY = 0;
self.isSnowboarding = false;
self.snowboardStartX = 0;
self.snowboardStartY = 0;
self.setActivity = function (newActivity, x, y) {
self.activity = newActivity;
self.activityTimer = 0;
self.originalX = x || self.x;
self.originalY = y || self.y;
if (newActivity === 'snowboarding') {
self.isSnowboarding = true;
self.snowboardStartX = self.x;
self.snowboardStartY = self.y;
}
};
self.down = function (x, y, obj) {
if (self.activity === 'idle') {
// Determine which activity based on position
var localPos = game.toLocal(obj.parent.toGlobal(obj.position));
if (localPos.y < 800) {
// Snowboarding area
self.setActivity('snowboarding');
LK.getSound('whoosh').play();
// Create snow particles
for (var i = 0; i < 8; i++) {
var particle = game.addChild(new SnowParticle());
particle.x = self.x + (Math.random() - 0.5) * 60;
particle.y = self.y + (Math.random() - 0.5) * 60;
snowParticles.push(particle);
}
} else if (localPos.y < 1600) {
// Snow angel area
self.setActivity('snowangel');
LK.getSound('snowcrunch').play();
// Create snow angel shape
var angel = game.addChild(LK.getAsset('snowAngel', {
anchorX: 0.5,
anchorY: 0.5
}));
angel.x = self.x;
angel.y = self.y + 20;
angel.alpha = 0.7;
snowAngels.push(angel);
}
}
};
self.update = function () {
self.activityTimer++;
if (self.activity === 'snowboarding') {
self.y += 4;
self.x += (Math.random() - 0.5) * 2;
girl.rotation += 0.1;
if (self.activityTimer % 5 === 0) {
var particle = game.addChild(new SnowParticle());
particle.x = self.x + (Math.random() - 0.5) * 40;
particle.y = self.y;
snowParticles.push(particle);
}
if (self.y > 750) {
self.activity = 'idle';
self.x = self.originalX;
self.y = self.originalY;
girl.rotation = 0;
self.isSnowboarding = false;
}
} else if (self.activity === 'snowangel') {
girl.scaleX = 1 + Math.sin(self.activityTimer * 0.3) * 0.2;
girl.rotation = Math.sin(self.activityTimer * 0.2) * 0.2;
if (self.activityTimer > 120) {
self.activity = 'idle';
girl.scaleX = 1;
girl.rotation = 0;
}
} else {
// Idle floating animation
girl.y = Math.sin(LK.ticks * 0.05 + self.originalX * 0.01) * 5;
}
};
return self;
});
var SnowParticle = Container.expand(function () {
var self = Container.call(this);
var particle = self.attachAsset('snowParticle', {
anchorX: 0.5,
anchorY: 0.5
});
self.speedX = (Math.random() - 0.5) * 4;
self.speedY = Math.random() * 3 + 2;
self.life = 60;
self.update = function () {
self.x += self.speedX;
self.y += self.speedY;
self.life--;
particle.alpha = self.life / 60;
if (self.life <= 0) {
self.destroy();
}
};
return self;
});
var SteamPuff = Container.expand(function () {
var self = Container.call(this);
var steam = self.attachAsset('steamPuff', {
anchorX: 0.5,
anchorY: 0.5
});
self.speedY = -2;
self.life = 90;
self.update = function () {
self.y += self.speedY;
self.life--;
steam.alpha = self.life / 90;
steam.scaleX = steam.scaleY = 1 + (90 - self.life) / 90;
if (self.life <= 0) {
self.destroy();
}
};
return self;
});
var Train = Container.expand(function () {
var self = Container.call(this);
var trainBody = self.attachAsset('powerpuffExpress', {
anchorX: 0.5,
anchorY: 0.5
});
self.isMoving = false;
self.moveTimer = 0;
self.steamTimer = 0;
self.down = function (x, y, obj) {
if (!self.isMoving) {
self.isMoving = true;
self.moveTimer = 0;
LK.getSound('trainWhistle').play();
tween(self, {
x: self.x + 300
}, {
duration: 2000,
easing: tween.easeOut,
onFinish: function onFinish() {
tween(self, {
x: self.x - 300
}, {
duration: 2000,
easing: tween.easeIn,
onFinish: function onFinish() {
self.isMoving = false;
}
});
}
});
}
};
self.update = function () {
if (self.isMoving) {
self.moveTimer++;
self.steamTimer++;
if (self.steamTimer % 15 === 0) {
var steam = game.addChild(new SteamPuff());
steam.x = self.x - 100;
steam.y = self.y - 60;
steamPuffs.push(steam);
}
}
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x87ceeb
});
/****
* Game Code
****/
// Arrays to track particles and effects
var snowParticles = [];
var steamPuffs = [];
var snowAngels = [];
// Create background areas
var hillArea = game.addChild(LK.getAsset('snowboardHill', {
anchorX: 0.5,
anchorY: 0.5
}));
hillArea.x = 1024;
hillArea.y = 400;
var angelArea = game.addChild(LK.getAsset('snowAngelArea', {
anchorX: 0.5,
anchorY: 0.5
}));
angelArea.x = 1024;
angelArea.y = 1200;
var track = game.addChild(LK.getAsset('trainTrack', {
anchorX: 0.5,
anchorY: 0.5
}));
track.x = 1024;
track.y = 2000;
// Create train
var train = game.addChild(new Train());
train.x = 700;
train.y = 1960;
// Create Powerpuff Girls
var blossom = game.addChild(new PowerpuffGirl('blossom'));
blossom.x = 900;
blossom.y = 300;
blossom.originalX = blossom.x;
blossom.originalY = blossom.y;
var bubbles = game.addChild(new PowerpuffGirl('bubbles'));
bubbles.x = 1024;
bubbles.y = 280;
bubbles.originalX = bubbles.x;
bubbles.originalY = bubbles.y;
var buttercup = game.addChild(new PowerpuffGirl('buttercup'));
buttercup.x = 1150;
buttercup.y = 320;
buttercup.originalX = buttercup.x;
buttercup.originalY = buttercup.y;
// Add activity labels
var snowboardLabel = new Text2('Tap Girls to Snowboard!', {
size: 60,
fill: 0xFFFFFF
});
snowboardLabel.anchor.set(0.5, 0.5);
snowboardLabel.x = 1024;
snowboardLabel.y = 150;
game.addChild(snowboardLabel);
var angelLabel = new Text2('Tap Girls to Make Snow Angels!', {
size: 60,
fill: 0xFFFFFF
});
angelLabel.anchor.set(0.5, 0.5);
angelLabel.x = 1024;
angelLabel.y = 1000;
game.addChild(angelLabel);
var trainLabel = new Text2('Tap Train for a Ride!', {
size: 60,
fill: 0xFFFFFF
});
trainLabel.anchor.set(0.5, 0.5);
trainLabel.x = 1024;
trainLabel.y = 1800;
game.addChild(trainLabel);
// Ambient snow particles
var ambientSnowTimer = 0;
game.update = function () {
ambientSnowTimer++;
// Create ambient snow
if (ambientSnowTimer % 20 === 0) {
var particle = game.addChild(new SnowParticle());
particle.x = Math.random() * 2048;
particle.y = -20;
particle.speedY = Math.random() * 2 + 1;
particle.speedX = (Math.random() - 0.5) * 2;
particle.life = 200;
snowParticles.push(particle);
}
// Clean up destroyed particles
for (var i = snowParticles.length - 1; i >= 0; i--) {
if (snowParticles[i].destroyed) {
snowParticles.splice(i, 1);
}
}
for (var j = steamPuffs.length - 1; j >= 0; j--) {
if (steamPuffs[j].destroyed) {
steamPuffs.splice(j, 1);
}
}
// Clean up old snow angels
for (var k = snowAngels.length - 1; k >= 0; k--) {
if (LK.ticks % 600 === 0) {
tween(snowAngels[k], {
alpha: 0
}, {
duration: 1000,
onFinish: function onFinish() {
if (snowAngels[k] && !snowAngels[k].destroyed) {
snowAngels[k].destroy();
snowAngels.splice(k, 1);
}
}
});
}
}
}; /****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var PowerpuffGirl = Container.expand(function (girlType, color) {
var self = Container.call(this);
var girl = self.attachAsset(girlType, {
anchorX: 0.5,
anchorY: 0.5
});
self.activity = 'idle';
self.activityTimer = 0;
self.originalX = 0;
self.originalY = 0;
self.isSnowboarding = false;
self.snowboardStartX = 0;
self.snowboardStartY = 0;
self.setActivity = function (newActivity, x, y) {
self.activity = newActivity;
self.activityTimer = 0;
self.originalX = x || self.x;
self.originalY = y || self.y;
if (newActivity === 'snowboarding') {
self.isSnowboarding = true;
self.snowboardStartX = self.x;
self.snowboardStartY = self.y;
}
};
self.down = function (x, y, obj) {
if (self.activity === 'idle') {
// Determine which activity based on position
var localPos = game.toLocal(obj.parent.toGlobal(obj.position));
if (localPos.y < 800) {
// Snowboarding area
self.setActivity('snowboarding');
LK.getSound('whoosh').play();
// Create snow particles
for (var i = 0; i < 8; i++) {
var particle = game.addChild(new SnowParticle());
particle.x = self.x + (Math.random() - 0.5) * 60;
particle.y = self.y + (Math.random() - 0.5) * 60;
snowParticles.push(particle);
}
} else if (localPos.y < 1600) {
// Snow angel area
self.setActivity('snowangel');
LK.getSound('snowcrunch').play();
// Create snow angel shape
var angel = game.addChild(LK.getAsset('snowAngel', {
anchorX: 0.5,
anchorY: 0.5
}));
angel.x = self.x;
angel.y = self.y + 20;
angel.alpha = 0.7;
snowAngels.push(angel);
}
}
};
self.update = function () {
self.activityTimer++;
if (self.activity === 'snowboarding') {
self.y += 4;
self.x += (Math.random() - 0.5) * 2;
girl.rotation += 0.1;
if (self.activityTimer % 5 === 0) {
var particle = game.addChild(new SnowParticle());
particle.x = self.x + (Math.random() - 0.5) * 40;
particle.y = self.y;
snowParticles.push(particle);
}
if (self.y > 750) {
self.activity = 'idle';
self.x = self.originalX;
self.y = self.originalY;
girl.rotation = 0;
self.isSnowboarding = false;
}
} else if (self.activity === 'snowangel') {
girl.scaleX = 1 + Math.sin(self.activityTimer * 0.3) * 0.2;
girl.rotation = Math.sin(self.activityTimer * 0.2) * 0.2;
if (self.activityTimer > 120) {
self.activity = 'idle';
girl.scaleX = 1;
girl.rotation = 0;
}
} else {
// Idle floating animation
girl.y = Math.sin(LK.ticks * 0.05 + self.originalX * 0.01) * 5;
}
};
return self;
});
var SnowParticle = Container.expand(function () {
var self = Container.call(this);
var particle = self.attachAsset('snowParticle', {
anchorX: 0.5,
anchorY: 0.5
});
self.speedX = (Math.random() - 0.5) * 4;
self.speedY = Math.random() * 3 + 2;
self.life = 60;
self.update = function () {
self.x += self.speedX;
self.y += self.speedY;
self.life--;
particle.alpha = self.life / 60;
if (self.life <= 0) {
self.destroy();
}
};
return self;
});
var SteamPuff = Container.expand(function () {
var self = Container.call(this);
var steam = self.attachAsset('steamPuff', {
anchorX: 0.5,
anchorY: 0.5
});
self.speedY = -2;
self.life = 90;
self.update = function () {
self.y += self.speedY;
self.life--;
steam.alpha = self.life / 90;
steam.scaleX = steam.scaleY = 1 + (90 - self.life) / 90;
if (self.life <= 0) {
self.destroy();
}
};
return self;
});
var Train = Container.expand(function () {
var self = Container.call(this);
var trainBody = self.attachAsset('powerpuffExpress', {
anchorX: 0.5,
anchorY: 0.5
});
self.isMoving = false;
self.moveTimer = 0;
self.steamTimer = 0;
self.down = function (x, y, obj) {
if (!self.isMoving) {
self.isMoving = true;
self.moveTimer = 0;
LK.getSound('trainWhistle').play();
tween(self, {
x: self.x + 300
}, {
duration: 2000,
easing: tween.easeOut,
onFinish: function onFinish() {
tween(self, {
x: self.x - 300
}, {
duration: 2000,
easing: tween.easeIn,
onFinish: function onFinish() {
self.isMoving = false;
}
});
}
});
}
};
self.update = function () {
if (self.isMoving) {
self.moveTimer++;
self.steamTimer++;
if (self.steamTimer % 15 === 0) {
var steam = game.addChild(new SteamPuff());
steam.x = self.x - 100;
steam.y = self.y - 60;
steamPuffs.push(steam);
}
}
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x87ceeb
});
/****
* Game Code
****/
// Arrays to track particles and effects
var snowParticles = [];
var steamPuffs = [];
var snowAngels = [];
// Create background areas
var hillArea = game.addChild(LK.getAsset('snowboardHill', {
anchorX: 0.5,
anchorY: 0.5
}));
hillArea.x = 1024;
hillArea.y = 400;
var angelArea = game.addChild(LK.getAsset('snowAngelArea', {
anchorX: 0.5,
anchorY: 0.5
}));
angelArea.x = 1024;
angelArea.y = 1200;
var track = game.addChild(LK.getAsset('trainTrack', {
anchorX: 0.5,
anchorY: 0.5
}));
track.x = 1024;
track.y = 2000;
// Create train
var train = game.addChild(new Train());
train.x = 700;
train.y = 1960;
// Create Powerpuff Girls
var blossom = game.addChild(new PowerpuffGirl('blossom'));
blossom.x = 900;
blossom.y = 300;
blossom.originalX = blossom.x;
blossom.originalY = blossom.y;
var bubbles = game.addChild(new PowerpuffGirl('bubbles'));
bubbles.x = 1024;
bubbles.y = 280;
bubbles.originalX = bubbles.x;
bubbles.originalY = bubbles.y;
var buttercup = game.addChild(new PowerpuffGirl('buttercup'));
buttercup.x = 1150;
buttercup.y = 320;
buttercup.originalX = buttercup.x;
buttercup.originalY = buttercup.y;
// Add activity labels
var snowboardLabel = new Text2('Tap Girls to Snowboard!', {
size: 60,
fill: 0xFFFFFF
});
snowboardLabel.anchor.set(0.5, 0.5);
snowboardLabel.x = 1024;
snowboardLabel.y = 150;
game.addChild(snowboardLabel);
var angelLabel = new Text2('Tap Girls to Make Snow Angels!', {
size: 60,
fill: 0xFFFFFF
});
angelLabel.anchor.set(0.5, 0.5);
angelLabel.x = 1024;
angelLabel.y = 1000;
game.addChild(angelLabel);
var trainLabel = new Text2('Tap Train for a Ride!', {
size: 60,
fill: 0xFFFFFF
});
trainLabel.anchor.set(0.5, 0.5);
trainLabel.x = 1024;
trainLabel.y = 1800;
game.addChild(trainLabel);
// Ambient snow particles
var ambientSnowTimer = 0;
game.update = function () {
ambientSnowTimer++;
// Create ambient snow
if (ambientSnowTimer % 20 === 0) {
var particle = game.addChild(new SnowParticle());
particle.x = Math.random() * 2048;
particle.y = -20;
particle.speedY = Math.random() * 2 + 1;
particle.speedX = (Math.random() - 0.5) * 2;
particle.life = 200;
snowParticles.push(particle);
}
// Clean up destroyed particles
for (var i = snowParticles.length - 1; i >= 0; i--) {
if (snowParticles[i].destroyed) {
snowParticles.splice(i, 1);
}
}
for (var j = steamPuffs.length - 1; j >= 0; j--) {
if (steamPuffs[j].destroyed) {
steamPuffs.splice(j, 1);
}
}
// Clean up old snow angels
for (var k = snowAngels.length - 1; k >= 0; k--) {
if (LK.ticks % 600 === 0) {
tween(snowAngels[k], {
alpha: 0
}, {
duration: 1000,
onFinish: function onFinish() {
if (snowAngels[k] && !snowAngels[k].destroyed) {
snowAngels[k].destroy();
snowAngels.splice(k, 1);
}
}
});
}
}
};