Code edit (1 edits merged)
Please save this source code
User prompt
Powerpuff Girls: Hidden Heroes
Initial prompt
Toca finding buttercup 💚 bubbles 💙 and blossom 🩷 (2015). It’s bedtime. But suddenly where are they!! Have you spot them in level 1 lava, level 2 water, level 3 sandstorm, level 4 snowstorm, or level 5 dino land? Tap to choose a level.
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.v1");
/****
* Classes
****/
var EnvironmentObject = Container.expand(function (objectType, x, y, scale) {
var self = Container.call(this);
var objectGraphics = self.attachAsset(objectType, {
anchorX: 0.5,
anchorY: 0.5,
scaleX: scale || 1,
scaleY: scale || 1
});
self.x = x;
self.y = y;
return self;
});
var MenuButton = Container.expand(function (levelName, color, x, y) {
var self = Container.call(this);
var buttonGraphics = self.attachAsset(levelName + 'Button', {
anchorX: 0.5,
anchorY: 0.5
});
var buttonText = new Text2(levelName.toUpperCase(), {
size: 40,
fill: 0xFFFFFF
});
buttonText.anchor.set(0.5, 0.5);
self.addChild(buttonText);
self.x = x;
self.y = y;
self.levelName = levelName;
self.down = function (x, y, obj) {
LK.getSound('buttonClick').play();
tween(self, {
scaleX: 0.9,
scaleY: 0.9
}, {
duration: 100
});
currentLevel = self.levelName;
showLevel();
};
self.up = function (x, y, obj) {
tween(self, {
scaleX: 1,
scaleY: 1
}, {
duration: 100
});
};
return self;
});
var PowerpuffGirl = Container.expand(function (girlType, x, y) {
var self = Container.call(this);
var girlGraphics = self.attachAsset(girlType, {
anchorX: 0.5,
anchorY: 0.5
});
self.x = x;
self.y = y;
self.girlType = girlType;
self.found = false;
self.alpha = 0.8; // Slightly transparent to make them harder to spot
self.down = function (x, y, obj) {
if (!self.found) {
self.found = true;
LK.getSound('found').play();
// Visual feedback - flash and grow
tween(self, {
scaleX: 1.5,
scaleY: 1.5,
alpha: 1
}, {
duration: 300
});
LK.effects.flashObject(self, 0xffffff, 500);
charactersFound++;
updateFoundCounter();
if (charactersFound >= 3) {
LK.setTimeout(function () {
levelComplete();
}, 800);
}
}
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x2c2c54
});
/****
* Game Code
****/
// Sound effects
// Environment objects
// Powerpuff Girls characters
// Menu level buttons
// Background environments
var currentScreen = 'menu'; // 'menu' or 'level'
var currentLevel = '';
var charactersFound = 0;
var levelContainer = null;
var menuContainer = null;
var foundCounterText = null;
// Level completion tracking
var completedLevels = storage.completedLevels || [];
// Initialize menu
function createMenu() {
menuContainer = new Container();
game.addChild(menuContainer);
// Title
var titleText = new Text2('POWERPUFF GIRLS\nHIDDEN HEROES', {
size: 80,
fill: 0xFFFFFF
});
titleText.anchor.set(0.5, 0.5);
titleText.x = 2048 / 2;
titleText.y = 400;
menuContainer.addChild(titleText);
// Instruction text
var instructionText = new Text2('Find Buttercup, Bubbles & Blossom!', {
size: 50,
fill: 0xFFFF99
});
instructionText.anchor.set(0.5, 0.5);
instructionText.x = 2048 / 2;
instructionText.y = 550;
menuContainer.addChild(instructionText);
// Level buttons in a grid
var levels = ['lava', 'water', 'sandstorm', 'snowstorm', 'dino'];
var buttonSpacing = 350;
var startX = 2048 / 2 - buttonSpacing;
var startY = 800;
for (var i = 0; i < levels.length; i++) {
var x = startX + i % 3 * buttonSpacing;
var y = startY + Math.floor(i / 3) * 280;
var button = new MenuButton(levels[i], 0x4a4a4a, x, y);
menuContainer.addChild(button);
}
}
function showLevel() {
if (menuContainer) {
menuContainer.destroy();
menuContainer = null;
}
currentScreen = 'level';
charactersFound = 0;
levelContainer = new Container();
game.addChild(levelContainer);
// Add background
var background = levelContainer.attachAsset(currentLevel + 'Background', {
anchorX: 0,
anchorY: 0
});
// Add environment objects based on level
createEnvironmentObjects();
// Add hidden Powerpuff Girls
createHiddenCharacters();
// Add UI elements
createLevelUI();
}
function createEnvironmentObjects() {
var objects = [];
switch (currentLevel) {
case 'lava':
objects = [{
type: 'lavaRock',
x: 300,
y: 800,
scale: 1.2
}, {
type: 'lavaRock',
x: 800,
y: 1200,
scale: 0.8
}, {
type: 'lavaRock',
x: 1500,
y: 900,
scale: 1.5
}, {
type: 'lavaRock',
x: 1200,
y: 1800,
scale: 1.0
}, {
type: 'lavaRock',
x: 600,
y: 2000,
scale: 1.3
}];
break;
case 'water':
objects = [{
type: 'coral',
x: 200,
y: 1000,
scale: 1.0
}, {
type: 'coral',
x: 700,
y: 1500,
scale: 1.2
}, {
type: 'coral',
x: 1300,
y: 800,
scale: 0.9
}, {
type: 'coral',
x: 1600,
y: 1700,
scale: 1.1
}, {
type: 'coral',
x: 400,
y: 2200,
scale: 0.8
}];
break;
case 'sandstorm':
objects = [{
type: 'sandDune',
x: 350,
y: 700,
scale: 1.1
}, {
type: 'sandDune',
x: 900,
y: 1100,
scale: 1.4
}, {
type: 'sandDune',
x: 1400,
y: 1400,
scale: 0.9
}, {
type: 'sandDune',
x: 500,
y: 1900,
scale: 1.2
}, {
type: 'sandDune',
x: 1100,
y: 2300,
scale: 1.0
}];
break;
case 'snowstorm':
objects = [{
type: 'snowPile',
x: 250,
y: 900,
scale: 1.3
}, {
type: 'snowPile',
x: 750,
y: 1300,
scale: 1.0
}, {
type: 'snowPile',
x: 1350,
y: 1000,
scale: 1.2
}, {
type: 'snowPile',
x: 1000,
y: 1800,
scale: 0.9
}, {
type: 'snowPile',
x: 1700,
y: 2100,
scale: 1.1
}];
break;
case 'dino':
objects = [{
type: 'tree',
x: 200,
y: 800,
scale: 1.0
}, {
type: 'tree',
x: 800,
y: 1200,
scale: 1.2
}, {
type: 'dinosaur',
x: 1300,
y: 1500,
scale: 0.8
}, {
type: 'tree',
x: 1600,
y: 900,
scale: 0.9
}, {
type: 'dinosaur',
x: 600,
y: 2000,
scale: 1.0
}];
break;
}
for (var i = 0; i < objects.length; i++) {
var obj = objects[i];
var envObj = new EnvironmentObject(obj.type, obj.x, obj.y, obj.scale);
levelContainer.addChild(envObj);
}
}
function createHiddenCharacters() {
var positions = getCharacterPositions();
var girls = ['buttercup', 'bubbles', 'blossom'];
for (var i = 0; i < girls.length; i++) {
var girl = new PowerpuffGirl(girls[i], positions[i].x, positions[i].y);
levelContainer.addChild(girl);
}
}
function getCharacterPositions() {
var positions = [];
switch (currentLevel) {
case 'lava':
positions = [{
x: 280,
y: 780
},
// Near first lava rock
{
x: 820,
y: 1180
},
// Near second lava rock
{
x: 1480,
y: 880
} // Near third lava rock
];
break;
case 'water':
positions = [{
x: 220,
y: 980
},
// Near first coral
{
x: 720,
y: 1480
},
// Near second coral
{
x: 1320,
y: 780
} // Near third coral
];
break;
case 'sandstorm':
positions = [{
x: 370,
y: 680
},
// Near first sand dune
{
x: 920,
y: 1080
},
// Near second sand dune
{
x: 1420,
y: 1380
} // Near third sand dune
];
break;
case 'snowstorm':
positions = [{
x: 270,
y: 880
},
// Near first snow pile
{
x: 770,
y: 1280
},
// Near second snow pile
{
x: 1370,
y: 980
} // Near third snow pile
];
break;
case 'dino':
positions = [{
x: 220,
y: 780
},
// Near first tree
{
x: 820,
y: 1180
},
// Near second tree
{
x: 1320,
y: 1480
} // Near dinosaur
];
break;
}
return positions;
}
function createLevelUI() {
// Back button
var backButton = new Text2('← BACK', {
size: 60,
fill: 0xFFFFFF
});
backButton.anchor.set(0, 0);
backButton.x = 150;
backButton.y = 150;
levelContainer.addChild(backButton);
backButton.down = function (x, y, obj) {
LK.getSound('buttonClick').play();
showMenu();
};
// Found counter
foundCounterText = new Text2('Found: 0/3', {
size: 50,
fill: 0xFFFFFF
});
foundCounterText.anchor.set(1, 0);
foundCounterText.x = 1900;
foundCounterText.y = 150;
levelContainer.addChild(foundCounterText);
// Level name
var levelNameText = new Text2(currentLevel.toUpperCase() + ' LEVEL', {
size: 60,
fill: 0xFFFF99
});
levelNameText.anchor.set(0.5, 0);
levelNameText.x = 2048 / 2;
levelNameText.y = 150;
levelContainer.addChild(levelNameText);
}
function updateFoundCounter() {
if (foundCounterText) {
foundCounterText.setText('Found: ' + charactersFound + '/3');
}
}
function levelComplete() {
LK.getSound('levelComplete').play();
// Add to completed levels
if (completedLevels.indexOf(currentLevel) === -1) {
completedLevels.push(currentLevel);
storage.completedLevels = completedLevels;
}
// Show completion message
var completeText = new Text2('LEVEL COMPLETE!\nAll Heroes Found!', {
size: 80,
fill: 0x00FF00
});
completeText.anchor.set(0.5, 0.5);
completeText.x = 2048 / 2;
completeText.y = 2732 / 2;
levelContainer.addChild(completeText);
// Flash screen
LK.effects.flashScreen(0x00ff00, 1000);
// Auto return to menu after delay
LK.setTimeout(function () {
showMenu();
}, 3000);
}
function showMenu() {
if (levelContainer) {
levelContainer.destroy();
levelContainer = null;
}
currentScreen = 'menu';
createMenu();
}
// Initialize the game
createMenu();
game.update = function () {
// Game logic updates if needed
}; ===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,494 @@
-/****
+/****
+* Plugins
+****/
+var tween = LK.import("@upit/tween.v1");
+var storage = LK.import("@upit/storage.v1");
+
+/****
+* Classes
+****/
+var EnvironmentObject = Container.expand(function (objectType, x, y, scale) {
+ var self = Container.call(this);
+ var objectGraphics = self.attachAsset(objectType, {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ scaleX: scale || 1,
+ scaleY: scale || 1
+ });
+ self.x = x;
+ self.y = y;
+ return self;
+});
+var MenuButton = Container.expand(function (levelName, color, x, y) {
+ var self = Container.call(this);
+ var buttonGraphics = self.attachAsset(levelName + 'Button', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ var buttonText = new Text2(levelName.toUpperCase(), {
+ size: 40,
+ fill: 0xFFFFFF
+ });
+ buttonText.anchor.set(0.5, 0.5);
+ self.addChild(buttonText);
+ self.x = x;
+ self.y = y;
+ self.levelName = levelName;
+ self.down = function (x, y, obj) {
+ LK.getSound('buttonClick').play();
+ tween(self, {
+ scaleX: 0.9,
+ scaleY: 0.9
+ }, {
+ duration: 100
+ });
+ currentLevel = self.levelName;
+ showLevel();
+ };
+ self.up = function (x, y, obj) {
+ tween(self, {
+ scaleX: 1,
+ scaleY: 1
+ }, {
+ duration: 100
+ });
+ };
+ return self;
+});
+var PowerpuffGirl = Container.expand(function (girlType, x, y) {
+ var self = Container.call(this);
+ var girlGraphics = self.attachAsset(girlType, {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.x = x;
+ self.y = y;
+ self.girlType = girlType;
+ self.found = false;
+ self.alpha = 0.8; // Slightly transparent to make them harder to spot
+ self.down = function (x, y, obj) {
+ if (!self.found) {
+ self.found = true;
+ LK.getSound('found').play();
+ // Visual feedback - flash and grow
+ tween(self, {
+ scaleX: 1.5,
+ scaleY: 1.5,
+ alpha: 1
+ }, {
+ duration: 300
+ });
+ LK.effects.flashObject(self, 0xffffff, 500);
+ charactersFound++;
+ updateFoundCounter();
+ if (charactersFound >= 3) {
+ LK.setTimeout(function () {
+ levelComplete();
+ }, 800);
+ }
+ }
+ };
+ return self;
+});
+
+/****
* Initialize Game
-****/
+****/
var game = new LK.Game({
- backgroundColor: 0x000000
-});
\ No newline at end of file
+ backgroundColor: 0x2c2c54
+});
+
+/****
+* Game Code
+****/
+// Sound effects
+// Environment objects
+// Powerpuff Girls characters
+// Menu level buttons
+// Background environments
+var currentScreen = 'menu'; // 'menu' or 'level'
+var currentLevel = '';
+var charactersFound = 0;
+var levelContainer = null;
+var menuContainer = null;
+var foundCounterText = null;
+// Level completion tracking
+var completedLevels = storage.completedLevels || [];
+// Initialize menu
+function createMenu() {
+ menuContainer = new Container();
+ game.addChild(menuContainer);
+ // Title
+ var titleText = new Text2('POWERPUFF GIRLS\nHIDDEN HEROES', {
+ size: 80,
+ fill: 0xFFFFFF
+ });
+ titleText.anchor.set(0.5, 0.5);
+ titleText.x = 2048 / 2;
+ titleText.y = 400;
+ menuContainer.addChild(titleText);
+ // Instruction text
+ var instructionText = new Text2('Find Buttercup, Bubbles & Blossom!', {
+ size: 50,
+ fill: 0xFFFF99
+ });
+ instructionText.anchor.set(0.5, 0.5);
+ instructionText.x = 2048 / 2;
+ instructionText.y = 550;
+ menuContainer.addChild(instructionText);
+ // Level buttons in a grid
+ var levels = ['lava', 'water', 'sandstorm', 'snowstorm', 'dino'];
+ var buttonSpacing = 350;
+ var startX = 2048 / 2 - buttonSpacing;
+ var startY = 800;
+ for (var i = 0; i < levels.length; i++) {
+ var x = startX + i % 3 * buttonSpacing;
+ var y = startY + Math.floor(i / 3) * 280;
+ var button = new MenuButton(levels[i], 0x4a4a4a, x, y);
+ menuContainer.addChild(button);
+ }
+}
+function showLevel() {
+ if (menuContainer) {
+ menuContainer.destroy();
+ menuContainer = null;
+ }
+ currentScreen = 'level';
+ charactersFound = 0;
+ levelContainer = new Container();
+ game.addChild(levelContainer);
+ // Add background
+ var background = levelContainer.attachAsset(currentLevel + 'Background', {
+ anchorX: 0,
+ anchorY: 0
+ });
+ // Add environment objects based on level
+ createEnvironmentObjects();
+ // Add hidden Powerpuff Girls
+ createHiddenCharacters();
+ // Add UI elements
+ createLevelUI();
+}
+function createEnvironmentObjects() {
+ var objects = [];
+ switch (currentLevel) {
+ case 'lava':
+ objects = [{
+ type: 'lavaRock',
+ x: 300,
+ y: 800,
+ scale: 1.2
+ }, {
+ type: 'lavaRock',
+ x: 800,
+ y: 1200,
+ scale: 0.8
+ }, {
+ type: 'lavaRock',
+ x: 1500,
+ y: 900,
+ scale: 1.5
+ }, {
+ type: 'lavaRock',
+ x: 1200,
+ y: 1800,
+ scale: 1.0
+ }, {
+ type: 'lavaRock',
+ x: 600,
+ y: 2000,
+ scale: 1.3
+ }];
+ break;
+ case 'water':
+ objects = [{
+ type: 'coral',
+ x: 200,
+ y: 1000,
+ scale: 1.0
+ }, {
+ type: 'coral',
+ x: 700,
+ y: 1500,
+ scale: 1.2
+ }, {
+ type: 'coral',
+ x: 1300,
+ y: 800,
+ scale: 0.9
+ }, {
+ type: 'coral',
+ x: 1600,
+ y: 1700,
+ scale: 1.1
+ }, {
+ type: 'coral',
+ x: 400,
+ y: 2200,
+ scale: 0.8
+ }];
+ break;
+ case 'sandstorm':
+ objects = [{
+ type: 'sandDune',
+ x: 350,
+ y: 700,
+ scale: 1.1
+ }, {
+ type: 'sandDune',
+ x: 900,
+ y: 1100,
+ scale: 1.4
+ }, {
+ type: 'sandDune',
+ x: 1400,
+ y: 1400,
+ scale: 0.9
+ }, {
+ type: 'sandDune',
+ x: 500,
+ y: 1900,
+ scale: 1.2
+ }, {
+ type: 'sandDune',
+ x: 1100,
+ y: 2300,
+ scale: 1.0
+ }];
+ break;
+ case 'snowstorm':
+ objects = [{
+ type: 'snowPile',
+ x: 250,
+ y: 900,
+ scale: 1.3
+ }, {
+ type: 'snowPile',
+ x: 750,
+ y: 1300,
+ scale: 1.0
+ }, {
+ type: 'snowPile',
+ x: 1350,
+ y: 1000,
+ scale: 1.2
+ }, {
+ type: 'snowPile',
+ x: 1000,
+ y: 1800,
+ scale: 0.9
+ }, {
+ type: 'snowPile',
+ x: 1700,
+ y: 2100,
+ scale: 1.1
+ }];
+ break;
+ case 'dino':
+ objects = [{
+ type: 'tree',
+ x: 200,
+ y: 800,
+ scale: 1.0
+ }, {
+ type: 'tree',
+ x: 800,
+ y: 1200,
+ scale: 1.2
+ }, {
+ type: 'dinosaur',
+ x: 1300,
+ y: 1500,
+ scale: 0.8
+ }, {
+ type: 'tree',
+ x: 1600,
+ y: 900,
+ scale: 0.9
+ }, {
+ type: 'dinosaur',
+ x: 600,
+ y: 2000,
+ scale: 1.0
+ }];
+ break;
+ }
+ for (var i = 0; i < objects.length; i++) {
+ var obj = objects[i];
+ var envObj = new EnvironmentObject(obj.type, obj.x, obj.y, obj.scale);
+ levelContainer.addChild(envObj);
+ }
+}
+function createHiddenCharacters() {
+ var positions = getCharacterPositions();
+ var girls = ['buttercup', 'bubbles', 'blossom'];
+ for (var i = 0; i < girls.length; i++) {
+ var girl = new PowerpuffGirl(girls[i], positions[i].x, positions[i].y);
+ levelContainer.addChild(girl);
+ }
+}
+function getCharacterPositions() {
+ var positions = [];
+ switch (currentLevel) {
+ case 'lava':
+ positions = [{
+ x: 280,
+ y: 780
+ },
+ // Near first lava rock
+ {
+ x: 820,
+ y: 1180
+ },
+ // Near second lava rock
+ {
+ x: 1480,
+ y: 880
+ } // Near third lava rock
+ ];
+ break;
+ case 'water':
+ positions = [{
+ x: 220,
+ y: 980
+ },
+ // Near first coral
+ {
+ x: 720,
+ y: 1480
+ },
+ // Near second coral
+ {
+ x: 1320,
+ y: 780
+ } // Near third coral
+ ];
+ break;
+ case 'sandstorm':
+ positions = [{
+ x: 370,
+ y: 680
+ },
+ // Near first sand dune
+ {
+ x: 920,
+ y: 1080
+ },
+ // Near second sand dune
+ {
+ x: 1420,
+ y: 1380
+ } // Near third sand dune
+ ];
+ break;
+ case 'snowstorm':
+ positions = [{
+ x: 270,
+ y: 880
+ },
+ // Near first snow pile
+ {
+ x: 770,
+ y: 1280
+ },
+ // Near second snow pile
+ {
+ x: 1370,
+ y: 980
+ } // Near third snow pile
+ ];
+ break;
+ case 'dino':
+ positions = [{
+ x: 220,
+ y: 780
+ },
+ // Near first tree
+ {
+ x: 820,
+ y: 1180
+ },
+ // Near second tree
+ {
+ x: 1320,
+ y: 1480
+ } // Near dinosaur
+ ];
+ break;
+ }
+ return positions;
+}
+function createLevelUI() {
+ // Back button
+ var backButton = new Text2('← BACK', {
+ size: 60,
+ fill: 0xFFFFFF
+ });
+ backButton.anchor.set(0, 0);
+ backButton.x = 150;
+ backButton.y = 150;
+ levelContainer.addChild(backButton);
+ backButton.down = function (x, y, obj) {
+ LK.getSound('buttonClick').play();
+ showMenu();
+ };
+ // Found counter
+ foundCounterText = new Text2('Found: 0/3', {
+ size: 50,
+ fill: 0xFFFFFF
+ });
+ foundCounterText.anchor.set(1, 0);
+ foundCounterText.x = 1900;
+ foundCounterText.y = 150;
+ levelContainer.addChild(foundCounterText);
+ // Level name
+ var levelNameText = new Text2(currentLevel.toUpperCase() + ' LEVEL', {
+ size: 60,
+ fill: 0xFFFF99
+ });
+ levelNameText.anchor.set(0.5, 0);
+ levelNameText.x = 2048 / 2;
+ levelNameText.y = 150;
+ levelContainer.addChild(levelNameText);
+}
+function updateFoundCounter() {
+ if (foundCounterText) {
+ foundCounterText.setText('Found: ' + charactersFound + '/3');
+ }
+}
+function levelComplete() {
+ LK.getSound('levelComplete').play();
+ // Add to completed levels
+ if (completedLevels.indexOf(currentLevel) === -1) {
+ completedLevels.push(currentLevel);
+ storage.completedLevels = completedLevels;
+ }
+ // Show completion message
+ var completeText = new Text2('LEVEL COMPLETE!\nAll Heroes Found!', {
+ size: 80,
+ fill: 0x00FF00
+ });
+ completeText.anchor.set(0.5, 0.5);
+ completeText.x = 2048 / 2;
+ completeText.y = 2732 / 2;
+ levelContainer.addChild(completeText);
+ // Flash screen
+ LK.effects.flashScreen(0x00ff00, 1000);
+ // Auto return to menu after delay
+ LK.setTimeout(function () {
+ showMenu();
+ }, 3000);
+}
+function showMenu() {
+ if (levelContainer) {
+ levelContainer.destroy();
+ levelContainer = null;
+ }
+ currentScreen = 'menu';
+ createMenu();
+}
+// Initialize the game
+createMenu();
+game.update = function () {
+ // Game logic updates if needed
+};
\ No newline at end of file