/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var MudSpot = Container.expand(function () {
var self = Container.call(this);
var graphics = self.attachAsset('mudspot', {
anchorX: 0.5,
anchorY: 0.5
});
self.cleaned = false;
return self;
});
var PowerpuffGirl = Container.expand(function (type) {
var self = Container.call(this);
var graphics = self.attachAsset(type, {
anchorX: 0.5,
anchorY: 1.0
});
self.type = type;
self.seated = false;
self.originalX = 0;
self.originalY = 0;
return self;
});
var WaterSpot = Container.expand(function () {
var self = Container.call(this);
var graphics = self.attachAsset('waterspot', {
anchorX: 0.5,
anchorY: 0.5
});
self.dried = false;
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x87CEEB
});
/****
* Game Code
****/
// Game state variables
var gameStage = 'trunk'; // trunk, wash, dry, seat, fly
var draggedItem = null;
// Create ground
var ground = game.addChild(LK.getAsset('ground', {
anchorX: 0,
anchorY: 1.0,
x: 0,
y: 2732
}));
// Create elephant
var elephant = game.addChild(LK.getAsset('elephant', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
y: 1200
}));
// Create trunk
var trunk = game.addChild(LK.getAsset('trunk', {
anchorX: 0.5,
anchorY: 0.0,
x: 1024,
y: 1000
}));
// Create mud spots on elephant
var mudSpots = [];
for (var i = 0; i < 6; i++) {
var mudSpot = new MudSpot();
mudSpot.x = elephant.x + (Math.random() - 0.5) * 400;
mudSpot.y = elephant.y + (Math.random() - 0.5) * 200;
mudSpots.push(mudSpot);
game.addChild(mudSpot);
}
// Create water spots (initially hidden)
var waterSpots = [];
for (var i = 0; i < 6; i++) {
var waterSpot = new WaterSpot();
waterSpot.x = mudSpots[i].x;
waterSpot.y = mudSpots[i].y;
waterSpot.alpha = 0;
waterSpots.push(waterSpot);
game.addChild(waterSpot);
}
// Create sponge
var sponge = game.addChild(LK.getAsset('sponge', {
anchorX: 0.5,
anchorY: 0.5,
x: 200,
y: 2000
}));
// Create hair dryer
var hairdryer = game.addChild(LK.getAsset('hairdryer', {
anchorX: 0.5,
anchorY: 0.5,
x: 1800,
y: 2000
}));
// Create seats on elephant
var seats = [];
for (var i = 0; i < 3; i++) {
var seat = game.addChild(LK.getAsset('seat', {
anchorX: 0.5,
anchorY: 0.5,
x: elephant.x - 120 + i * 120,
y: elephant.y - 100
}));
seats.push(seat);
}
// Create Powerpuff Girls
var blossom = new PowerpuffGirl('blossom');
blossom.x = 300;
blossom.y = 2500;
blossom.originalX = blossom.x;
blossom.originalY = blossom.y;
game.addChild(blossom);
var bubbles = new PowerpuffGirl('bubbles');
bubbles.x = 1024;
bubbles.y = 2500;
bubbles.originalX = bubbles.x;
bubbles.originalY = bubbles.y;
game.addChild(bubbles);
var buttercup = new PowerpuffGirl('buttercup');
buttercup.x = 1700;
buttercup.y = 2500;
buttercup.originalX = buttercup.x;
buttercup.originalY = buttercup.y;
game.addChild(buttercup);
var girls = [blossom, bubbles, buttercup];
// Create instruction text
var instructionText = new Text2('Pull the trunk down to the ground!', {
size: 60,
fill: 0x000000
});
instructionText.anchor.set(0.5, 0);
LK.gui.top.addChild(instructionText);
// Game functions
function updateInstructions() {
switch (gameStage) {
case 'trunk':
instructionText.setText('Pull the trunk down to the ground!');
break;
case 'wash':
instructionText.setText('Use the sponge to clean the mud!');
break;
case 'dry':
instructionText.setText('Use the hair dryer to dry the elephant!');
break;
case 'seat':
instructionText.setText('Place the Powerpuff Girls on the seats!');
break;
case 'fly':
instructionText.setText('Tap the elephant to make it fly!');
break;
case 'complete':
instructionText.setText('Adventure complete!');
break;
}
}
function checkTrunkPulled() {
if (trunk.y >= 2400) {
// Trunk reaches ground level
gameStage = 'wash';
updateInstructions();
return true;
}
return false;
}
function checkMudCleaned() {
var allCleaned = true;
for (var i = 0; i < mudSpots.length; i++) {
if (!mudSpots[i].cleaned) {
allCleaned = false;
break;
}
}
if (allCleaned && gameStage === 'wash') {
gameStage = 'dry';
updateInstructions();
// Show water spots
for (var i = 0; i < waterSpots.length; i++) {
waterSpots[i].alpha = 1;
}
}
return allCleaned;
}
function checkElephantDried() {
var allDried = true;
for (var i = 0; i < waterSpots.length; i++) {
if (!waterSpots[i].dried) {
allDried = false;
break;
}
}
if (allDried && gameStage === 'dry') {
gameStage = 'seat';
updateInstructions();
}
return allDried;
}
function checkAllSeated() {
var allSeated = true;
for (var i = 0; i < girls.length; i++) {
if (!girls[i].seated) {
allSeated = false;
break;
}
}
if (allSeated && gameStage === 'seat') {
gameStage = 'fly';
updateInstructions();
}
return allSeated;
}
function makeElephantFly() {
if (gameStage === 'fly') {
LK.getSound('fly').play();
// Animate elephant and girls flying up
tween(elephant, {
y: -200,
scaleX: 0.5,
scaleY: 0.5
}, {
duration: 3000
});
tween(trunk, {
y: -400
}, {
duration: 3000
});
for (var i = 0; i < girls.length; i++) {
if (girls[i].seated) {
tween(girls[i], {
y: girls[i].y - 1400,
scaleX: 0.5,
scaleY: 0.5
}, {
duration: 3000
});
}
}
for (var i = 0; i < seats.length; i++) {
tween(seats[i], {
y: seats[i].y - 1400,
scaleX: 0.5,
scaleY: 0.5
}, {
duration: 3000
});
}
gameStage = 'complete';
LK.setTimeout(function () {
updateInstructions();
LK.setTimeout(function () {
LK.showYouWin();
}, 2000);
}, 3000);
}
}
// Event handlers
game.down = function (x, y, obj) {
if (gameStage === 'trunk' && trunk.intersects({
x: x,
y: y,
width: 1,
height: 1
})) {
draggedItem = trunk;
} else if (gameStage === 'wash' && sponge.intersects({
x: x,
y: y,
width: 1,
height: 1
})) {
draggedItem = sponge;
} else if (gameStage === 'dry' && hairdryer.intersects({
x: x,
y: y,
width: 1,
height: 1
})) {
draggedItem = hairdryer;
} else if (gameStage === 'seat') {
for (var i = 0; i < girls.length; i++) {
if (!girls[i].seated && girls[i].intersects({
x: x,
y: y,
width: 1,
height: 1
})) {
draggedItem = girls[i];
break;
}
}
} else if (gameStage === 'fly' && elephant.intersects({
x: x,
y: y,
width: 1,
height: 1
})) {
makeElephantFly();
}
};
game.move = function (x, y, obj) {
if (draggedItem) {
draggedItem.x = x;
draggedItem.y = y;
if (draggedItem === trunk) {
checkTrunkPulled();
} else if (draggedItem === sponge) {
// Check collision with mud spots
for (var i = 0; i < mudSpots.length; i++) {
if (!mudSpots[i].cleaned && sponge.intersects(mudSpots[i])) {
mudSpots[i].cleaned = true;
mudSpots[i].alpha = 0;
LK.getSound('splash').play();
}
}
checkMudCleaned();
} else if (draggedItem === hairdryer) {
// Check collision with water spots
for (var i = 0; i < waterSpots.length; i++) {
if (!waterSpots[i].dried && hairdryer.intersects(waterSpots[i])) {
waterSpots[i].dried = true;
waterSpots[i].alpha = 0;
LK.getSound('whoosh').play();
}
}
checkElephantDried();
}
}
};
game.up = function (x, y, obj) {
if (draggedItem && gameStage === 'seat') {
// Check if girl is dropped on a seat
var droppedOnSeat = false;
for (var i = 0; i < seats.length; i++) {
if (draggedItem.intersects(seats[i])) {
// Check if seat is already occupied
var seatOccupied = false;
for (var j = 0; j < girls.length; j++) {
if (girls[j] !== draggedItem && girls[j].seated && Math.abs(girls[j].x - seats[i].x) < 50 && Math.abs(girls[j].y - seats[i].y) < 50) {
seatOccupied = true;
break;
}
}
if (!seatOccupied) {
draggedItem.x = seats[i].x;
draggedItem.y = seats[i].y;
draggedItem.seated = true;
droppedOnSeat = true;
break;
}
}
}
// If not dropped on valid seat, return to original position
if (!droppedOnSeat) {
draggedItem.x = draggedItem.originalX;
draggedItem.y = draggedItem.originalY;
draggedItem.seated = false;
}
checkAllSeated();
}
draggedItem = null;
};
// Initialize instructions
updateInstructions(); /****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var MudSpot = Container.expand(function () {
var self = Container.call(this);
var graphics = self.attachAsset('mudspot', {
anchorX: 0.5,
anchorY: 0.5
});
self.cleaned = false;
return self;
});
var PowerpuffGirl = Container.expand(function (type) {
var self = Container.call(this);
var graphics = self.attachAsset(type, {
anchorX: 0.5,
anchorY: 1.0
});
self.type = type;
self.seated = false;
self.originalX = 0;
self.originalY = 0;
return self;
});
var WaterSpot = Container.expand(function () {
var self = Container.call(this);
var graphics = self.attachAsset('waterspot', {
anchorX: 0.5,
anchorY: 0.5
});
self.dried = false;
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x87CEEB
});
/****
* Game Code
****/
// Game state variables
var gameStage = 'trunk'; // trunk, wash, dry, seat, fly
var draggedItem = null;
// Create ground
var ground = game.addChild(LK.getAsset('ground', {
anchorX: 0,
anchorY: 1.0,
x: 0,
y: 2732
}));
// Create elephant
var elephant = game.addChild(LK.getAsset('elephant', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
y: 1200
}));
// Create trunk
var trunk = game.addChild(LK.getAsset('trunk', {
anchorX: 0.5,
anchorY: 0.0,
x: 1024,
y: 1000
}));
// Create mud spots on elephant
var mudSpots = [];
for (var i = 0; i < 6; i++) {
var mudSpot = new MudSpot();
mudSpot.x = elephant.x + (Math.random() - 0.5) * 400;
mudSpot.y = elephant.y + (Math.random() - 0.5) * 200;
mudSpots.push(mudSpot);
game.addChild(mudSpot);
}
// Create water spots (initially hidden)
var waterSpots = [];
for (var i = 0; i < 6; i++) {
var waterSpot = new WaterSpot();
waterSpot.x = mudSpots[i].x;
waterSpot.y = mudSpots[i].y;
waterSpot.alpha = 0;
waterSpots.push(waterSpot);
game.addChild(waterSpot);
}
// Create sponge
var sponge = game.addChild(LK.getAsset('sponge', {
anchorX: 0.5,
anchorY: 0.5,
x: 200,
y: 2000
}));
// Create hair dryer
var hairdryer = game.addChild(LK.getAsset('hairdryer', {
anchorX: 0.5,
anchorY: 0.5,
x: 1800,
y: 2000
}));
// Create seats on elephant
var seats = [];
for (var i = 0; i < 3; i++) {
var seat = game.addChild(LK.getAsset('seat', {
anchorX: 0.5,
anchorY: 0.5,
x: elephant.x - 120 + i * 120,
y: elephant.y - 100
}));
seats.push(seat);
}
// Create Powerpuff Girls
var blossom = new PowerpuffGirl('blossom');
blossom.x = 300;
blossom.y = 2500;
blossom.originalX = blossom.x;
blossom.originalY = blossom.y;
game.addChild(blossom);
var bubbles = new PowerpuffGirl('bubbles');
bubbles.x = 1024;
bubbles.y = 2500;
bubbles.originalX = bubbles.x;
bubbles.originalY = bubbles.y;
game.addChild(bubbles);
var buttercup = new PowerpuffGirl('buttercup');
buttercup.x = 1700;
buttercup.y = 2500;
buttercup.originalX = buttercup.x;
buttercup.originalY = buttercup.y;
game.addChild(buttercup);
var girls = [blossom, bubbles, buttercup];
// Create instruction text
var instructionText = new Text2('Pull the trunk down to the ground!', {
size: 60,
fill: 0x000000
});
instructionText.anchor.set(0.5, 0);
LK.gui.top.addChild(instructionText);
// Game functions
function updateInstructions() {
switch (gameStage) {
case 'trunk':
instructionText.setText('Pull the trunk down to the ground!');
break;
case 'wash':
instructionText.setText('Use the sponge to clean the mud!');
break;
case 'dry':
instructionText.setText('Use the hair dryer to dry the elephant!');
break;
case 'seat':
instructionText.setText('Place the Powerpuff Girls on the seats!');
break;
case 'fly':
instructionText.setText('Tap the elephant to make it fly!');
break;
case 'complete':
instructionText.setText('Adventure complete!');
break;
}
}
function checkTrunkPulled() {
if (trunk.y >= 2400) {
// Trunk reaches ground level
gameStage = 'wash';
updateInstructions();
return true;
}
return false;
}
function checkMudCleaned() {
var allCleaned = true;
for (var i = 0; i < mudSpots.length; i++) {
if (!mudSpots[i].cleaned) {
allCleaned = false;
break;
}
}
if (allCleaned && gameStage === 'wash') {
gameStage = 'dry';
updateInstructions();
// Show water spots
for (var i = 0; i < waterSpots.length; i++) {
waterSpots[i].alpha = 1;
}
}
return allCleaned;
}
function checkElephantDried() {
var allDried = true;
for (var i = 0; i < waterSpots.length; i++) {
if (!waterSpots[i].dried) {
allDried = false;
break;
}
}
if (allDried && gameStage === 'dry') {
gameStage = 'seat';
updateInstructions();
}
return allDried;
}
function checkAllSeated() {
var allSeated = true;
for (var i = 0; i < girls.length; i++) {
if (!girls[i].seated) {
allSeated = false;
break;
}
}
if (allSeated && gameStage === 'seat') {
gameStage = 'fly';
updateInstructions();
}
return allSeated;
}
function makeElephantFly() {
if (gameStage === 'fly') {
LK.getSound('fly').play();
// Animate elephant and girls flying up
tween(elephant, {
y: -200,
scaleX: 0.5,
scaleY: 0.5
}, {
duration: 3000
});
tween(trunk, {
y: -400
}, {
duration: 3000
});
for (var i = 0; i < girls.length; i++) {
if (girls[i].seated) {
tween(girls[i], {
y: girls[i].y - 1400,
scaleX: 0.5,
scaleY: 0.5
}, {
duration: 3000
});
}
}
for (var i = 0; i < seats.length; i++) {
tween(seats[i], {
y: seats[i].y - 1400,
scaleX: 0.5,
scaleY: 0.5
}, {
duration: 3000
});
}
gameStage = 'complete';
LK.setTimeout(function () {
updateInstructions();
LK.setTimeout(function () {
LK.showYouWin();
}, 2000);
}, 3000);
}
}
// Event handlers
game.down = function (x, y, obj) {
if (gameStage === 'trunk' && trunk.intersects({
x: x,
y: y,
width: 1,
height: 1
})) {
draggedItem = trunk;
} else if (gameStage === 'wash' && sponge.intersects({
x: x,
y: y,
width: 1,
height: 1
})) {
draggedItem = sponge;
} else if (gameStage === 'dry' && hairdryer.intersects({
x: x,
y: y,
width: 1,
height: 1
})) {
draggedItem = hairdryer;
} else if (gameStage === 'seat') {
for (var i = 0; i < girls.length; i++) {
if (!girls[i].seated && girls[i].intersects({
x: x,
y: y,
width: 1,
height: 1
})) {
draggedItem = girls[i];
break;
}
}
} else if (gameStage === 'fly' && elephant.intersects({
x: x,
y: y,
width: 1,
height: 1
})) {
makeElephantFly();
}
};
game.move = function (x, y, obj) {
if (draggedItem) {
draggedItem.x = x;
draggedItem.y = y;
if (draggedItem === trunk) {
checkTrunkPulled();
} else if (draggedItem === sponge) {
// Check collision with mud spots
for (var i = 0; i < mudSpots.length; i++) {
if (!mudSpots[i].cleaned && sponge.intersects(mudSpots[i])) {
mudSpots[i].cleaned = true;
mudSpots[i].alpha = 0;
LK.getSound('splash').play();
}
}
checkMudCleaned();
} else if (draggedItem === hairdryer) {
// Check collision with water spots
for (var i = 0; i < waterSpots.length; i++) {
if (!waterSpots[i].dried && hairdryer.intersects(waterSpots[i])) {
waterSpots[i].dried = true;
waterSpots[i].alpha = 0;
LK.getSound('whoosh').play();
}
}
checkElephantDried();
}
}
};
game.up = function (x, y, obj) {
if (draggedItem && gameStage === 'seat') {
// Check if girl is dropped on a seat
var droppedOnSeat = false;
for (var i = 0; i < seats.length; i++) {
if (draggedItem.intersects(seats[i])) {
// Check if seat is already occupied
var seatOccupied = false;
for (var j = 0; j < girls.length; j++) {
if (girls[j] !== draggedItem && girls[j].seated && Math.abs(girls[j].x - seats[i].x) < 50 && Math.abs(girls[j].y - seats[i].y) < 50) {
seatOccupied = true;
break;
}
}
if (!seatOccupied) {
draggedItem.x = seats[i].x;
draggedItem.y = seats[i].y;
draggedItem.seated = true;
droppedOnSeat = true;
break;
}
}
}
// If not dropped on valid seat, return to original position
if (!droppedOnSeat) {
draggedItem.x = draggedItem.originalX;
draggedItem.y = draggedItem.originalY;
draggedItem.seated = false;
}
checkAllSeated();
}
draggedItem = null;
};
// Initialize instructions
updateInstructions();