Code edit (1 edits merged)
Please save this source code
User prompt
PowerPuff Girls Mystery House Adventure
Initial prompt
Toca mystery house (2018). The powerpuff girls are inside the haunted house 🔦. Use your finger to move the powerpuff girls walk inside the haunted house, tap on the door to go inside the bedroom, tap on the mystry key 🔑 to get it.
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); var storage = LK.import("@upit/storage.v1"); /**** * Classes ****/ var Door = Container.expand(function (targetRoom, doorX, doorY) { var self = Container.call(this); var doorGraphics = self.attachAsset('door', { anchorX: 0.5, anchorY: 1.0 }); self.targetRoom = targetRoom; self.isOpen = false; self.down = function (x, y, obj) { if (!self.isOpen) { self.openDoor(); } }; self.openDoor = function () { self.isOpen = true; LK.getSound('doorOpen').play(); tween(doorGraphics, { scaleX: 1.1, scaleY: 1.1 }, { duration: 200, easing: tween.easeOut, onFinish: function onFinish() { tween(doorGraphics, { scaleX: 1.0, scaleY: 1.0 }, { duration: 200, easing: tween.easeIn, onFinish: function onFinish() { game.switchRoom(self.targetRoom); } }); } }); }; return self; }); var HiddenObject = Container.expand(function () { var self = Container.call(this); var objectGraphics = self.attachAsset('hiddenObject', { anchorX: 0.5, anchorY: 0.5 }); self.found = false; objectGraphics.alpha = 0.3; self.down = function (x, y, obj) { if (!self.found) { self.discover(); } }; self.discover = function () { if (self.found) return; self.found = true; objectsFound++; updateScore(); LK.getSound('itemFound').play(); tween(objectGraphics, { alpha: 1, scaleX: 1.3, scaleY: 1.3 }, { duration: 300, easing: tween.easeOut }); }; return self; }); var MysteryKey = Container.expand(function () { var self = Container.call(this); var keyGraphics = self.attachAsset('mysteryKey', { anchorX: 0.5, anchorY: 0.5 }); self.collected = false; self.down = function (x, y, obj) { if (!self.collected) { self.collect(); } }; self.collect = function () { if (self.collected) return; self.collected = true; keysCollected++; updateScore(); LK.getSound('keyCollect').play(); tween(self, { scaleX: 2, scaleY: 2, alpha: 0 }, { duration: 500, easing: tween.easeOut, onFinish: function onFinish() { self.destroy(); } }); }; self.update = function () { if (!self.collected) { keyGraphics.rotation += 0.05; } }; return self; }); var PowerPuffGirl = Container.expand(function (type) { var self = Container.call(this); var girlGraphics = self.attachAsset(type, { anchorX: 0.5, anchorY: 0.5 }); self.type = type; self.isMoving = false; self.moveTo = function (targetX, targetY) { if (self.isMoving) return; self.isMoving = true; var duration = Math.sqrt(Math.pow(targetX - self.x, 2) + Math.pow(targetY - self.y, 2)) * 2; tween(self, { x: targetX, y: targetY }, { duration: duration, easing: tween.easeOut, onFinish: function onFinish() { self.isMoving = false; } }); }; return self; }); var Room = Container.expand(function (roomType) { var self = Container.call(this); var background = self.attachAsset(roomType, { anchorX: 0, anchorY: 0 }); self.roomType = roomType; self.doors = []; self.keys = []; self.hiddenObjects = []; self.addDoor = function (targetRoom, x, y) { var door = new Door(targetRoom, x, y); door.x = x; door.y = y; self.doors.push(door); self.addChild(door); return door; }; self.addKey = function (x, y) { var key = new MysteryKey(); key.x = x; key.y = y; self.keys.push(key); self.addChild(key); return key; }; self.addHiddenObject = function (x, y) { var obj = new HiddenObject(); obj.x = x; obj.y = y; self.hiddenObjects.push(obj); self.addChild(obj); return obj; }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x000000 }); /**** * Game Code ****/ // Sounds // Interactive elements // Room backgrounds // PowerPuff Girls characters // Game variables var currentRoom = null; var powerPuffGirls = []; var keysCollected = 0; var objectsFound = 0; var totalKeys = 0; var totalObjects = 0; var rooms = {}; var draggedGirl = null; // UI Elements var scoreText = new Text2('Keys: 0/0 | Objects: 0/0', { size: 60, fill: 0xFFFFFF }); scoreText.anchor.set(0.5, 0); LK.gui.top.addChild(scoreText); var roomNameText = new Text2('Living Room', { size: 80, fill: 0xFFFF00 }); roomNameText.anchor.set(0.5, 0); roomNameText.y = 100; LK.gui.top.addChild(roomNameText); // Create rooms function createRooms() { // Living Room rooms.livingRoom = new Room('livingRoom'); rooms.livingRoom.addDoor('kitchen', 1800, 1000); rooms.livingRoom.addDoor('bedroom', 1800, 1800); rooms.livingRoom.addKey(300, 800); rooms.livingRoom.addKey(1500, 1200); rooms.livingRoom.addHiddenObject(800, 600); rooms.livingRoom.addHiddenObject(1200, 1600); // Kitchen rooms.kitchen = new Room('kitchen'); rooms.kitchen.addDoor('livingRoom', 200, 1000); rooms.kitchen.addDoor('attic', 1800, 600); rooms.kitchen.addKey(1000, 1200); rooms.kitchen.addKey(600, 2000); rooms.kitchen.addHiddenObject(1600, 800); // Bedroom rooms.bedroom = new Room('bedroom'); rooms.bedroom.addDoor('livingRoom', 200, 1800); rooms.bedroom.addKey(1200, 800); rooms.bedroom.addKey(800, 1800); rooms.bedroom.addHiddenObject(1600, 1200); rooms.bedroom.addHiddenObject(400, 1200); // Attic rooms.attic = new Room('attic'); rooms.attic.addDoor('kitchen', 200, 600); rooms.attic.addKey(1000, 1000); rooms.attic.addKey(1600, 1600); rooms.attic.addHiddenObject(600, 800); // Count total collectibles for (var roomName in rooms) { var room = rooms[roomName]; totalKeys += room.keys.length; totalObjects += room.hiddenObjects.length; } } // Create PowerPuff Girls function createPowerPuffGirls() { var types = ['blossom', 'bubbles', 'buttercup']; var startX = 400; for (var i = 0; i < types.length; i++) { var girl = new PowerPuffGirl(types[i]); girl.x = startX + i * 200; girl.y = 2000; powerPuffGirls.push(girl); } } // Switch room function game.switchRoom = function (roomName) { if (currentRoom) { game.removeChild(currentRoom); } currentRoom = rooms[roomName]; game.addChild(currentRoom); // Add girls to new room for (var i = 0; i < powerPuffGirls.length; i++) { currentRoom.addChild(powerPuffGirls[i]); } // Update room name var displayName = roomName.charAt(0).toUpperCase() + roomName.slice(1); if (displayName === 'Livingroom') displayName = 'Living Room'; roomNameText.setText(displayName); }; // Update score display function updateScore() { scoreText.setText('Keys: ' + keysCollected + '/' + totalKeys + ' | Objects: ' + objectsFound + '/' + totalObjects); // Check win condition if (keysCollected >= totalKeys && objectsFound >= totalObjects) { LK.setTimeout(function () { LK.showYouWin(); }, 1000); } } // Touch controls game.down = function (x, y, obj) { // Check if touching a PowerPuff Girl for (var i = 0; i < powerPuffGirls.length; i++) { var girl = powerPuffGirls[i]; if (girl.parent === currentRoom) { var localPos = girl.toLocal({ x: x, y: y }); if (Math.abs(localPos.x) < 60 && Math.abs(localPos.y) < 60) { draggedGirl = girl; return; } } } }; game.move = function (x, y, obj) { if (draggedGirl) { // Constrain movement within room bounds var constrainedX = Math.max(100, Math.min(1948, x)); var constrainedY = Math.max(100, Math.min(2632, y)); draggedGirl.moveTo(constrainedX, constrainedY); } }; game.up = function (x, y, obj) { draggedGirl = null; }; // Initialize game createRooms(); createPowerPuffGirls(); game.switchRoom('livingRoom'); updateScore(); // Main game loop game.update = function () { // Check for collisions between girls and interactive objects for (var i = 0; i < powerPuffGirls.length; i++) { var girl = powerPuffGirls[i]; if (girl.parent !== currentRoom) continue; // Check key collisions for (var j = 0; j < currentRoom.keys.length; j++) { var key = currentRoom.keys[j]; if (!key.collected && girl.intersects(key)) { key.collect(); break; } } // Check hidden object collisions for (var k = 0; k < currentRoom.hiddenObjects.length; k++) { var obj = currentRoom.hiddenObjects[k]; if (!obj.found && girl.intersects(obj)) { obj.discover(); break; } } } };
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.v1");
/****
* Classes
****/
var Door = Container.expand(function (targetRoom, doorX, doorY) {
var self = Container.call(this);
var doorGraphics = self.attachAsset('door', {
anchorX: 0.5,
anchorY: 1.0
});
self.targetRoom = targetRoom;
self.isOpen = false;
self.down = function (x, y, obj) {
if (!self.isOpen) {
self.openDoor();
}
};
self.openDoor = function () {
self.isOpen = true;
LK.getSound('doorOpen').play();
tween(doorGraphics, {
scaleX: 1.1,
scaleY: 1.1
}, {
duration: 200,
easing: tween.easeOut,
onFinish: function onFinish() {
tween(doorGraphics, {
scaleX: 1.0,
scaleY: 1.0
}, {
duration: 200,
easing: tween.easeIn,
onFinish: function onFinish() {
game.switchRoom(self.targetRoom);
}
});
}
});
};
return self;
});
var HiddenObject = Container.expand(function () {
var self = Container.call(this);
var objectGraphics = self.attachAsset('hiddenObject', {
anchorX: 0.5,
anchorY: 0.5
});
self.found = false;
objectGraphics.alpha = 0.3;
self.down = function (x, y, obj) {
if (!self.found) {
self.discover();
}
};
self.discover = function () {
if (self.found) return;
self.found = true;
objectsFound++;
updateScore();
LK.getSound('itemFound').play();
tween(objectGraphics, {
alpha: 1,
scaleX: 1.3,
scaleY: 1.3
}, {
duration: 300,
easing: tween.easeOut
});
};
return self;
});
var MysteryKey = Container.expand(function () {
var self = Container.call(this);
var keyGraphics = self.attachAsset('mysteryKey', {
anchorX: 0.5,
anchorY: 0.5
});
self.collected = false;
self.down = function (x, y, obj) {
if (!self.collected) {
self.collect();
}
};
self.collect = function () {
if (self.collected) return;
self.collected = true;
keysCollected++;
updateScore();
LK.getSound('keyCollect').play();
tween(self, {
scaleX: 2,
scaleY: 2,
alpha: 0
}, {
duration: 500,
easing: tween.easeOut,
onFinish: function onFinish() {
self.destroy();
}
});
};
self.update = function () {
if (!self.collected) {
keyGraphics.rotation += 0.05;
}
};
return self;
});
var PowerPuffGirl = Container.expand(function (type) {
var self = Container.call(this);
var girlGraphics = self.attachAsset(type, {
anchorX: 0.5,
anchorY: 0.5
});
self.type = type;
self.isMoving = false;
self.moveTo = function (targetX, targetY) {
if (self.isMoving) return;
self.isMoving = true;
var duration = Math.sqrt(Math.pow(targetX - self.x, 2) + Math.pow(targetY - self.y, 2)) * 2;
tween(self, {
x: targetX,
y: targetY
}, {
duration: duration,
easing: tween.easeOut,
onFinish: function onFinish() {
self.isMoving = false;
}
});
};
return self;
});
var Room = Container.expand(function (roomType) {
var self = Container.call(this);
var background = self.attachAsset(roomType, {
anchorX: 0,
anchorY: 0
});
self.roomType = roomType;
self.doors = [];
self.keys = [];
self.hiddenObjects = [];
self.addDoor = function (targetRoom, x, y) {
var door = new Door(targetRoom, x, y);
door.x = x;
door.y = y;
self.doors.push(door);
self.addChild(door);
return door;
};
self.addKey = function (x, y) {
var key = new MysteryKey();
key.x = x;
key.y = y;
self.keys.push(key);
self.addChild(key);
return key;
};
self.addHiddenObject = function (x, y) {
var obj = new HiddenObject();
obj.x = x;
obj.y = y;
self.hiddenObjects.push(obj);
self.addChild(obj);
return obj;
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x000000
});
/****
* Game Code
****/
// Sounds
// Interactive elements
// Room backgrounds
// PowerPuff Girls characters
// Game variables
var currentRoom = null;
var powerPuffGirls = [];
var keysCollected = 0;
var objectsFound = 0;
var totalKeys = 0;
var totalObjects = 0;
var rooms = {};
var draggedGirl = null;
// UI Elements
var scoreText = new Text2('Keys: 0/0 | Objects: 0/0', {
size: 60,
fill: 0xFFFFFF
});
scoreText.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreText);
var roomNameText = new Text2('Living Room', {
size: 80,
fill: 0xFFFF00
});
roomNameText.anchor.set(0.5, 0);
roomNameText.y = 100;
LK.gui.top.addChild(roomNameText);
// Create rooms
function createRooms() {
// Living Room
rooms.livingRoom = new Room('livingRoom');
rooms.livingRoom.addDoor('kitchen', 1800, 1000);
rooms.livingRoom.addDoor('bedroom', 1800, 1800);
rooms.livingRoom.addKey(300, 800);
rooms.livingRoom.addKey(1500, 1200);
rooms.livingRoom.addHiddenObject(800, 600);
rooms.livingRoom.addHiddenObject(1200, 1600);
// Kitchen
rooms.kitchen = new Room('kitchen');
rooms.kitchen.addDoor('livingRoom', 200, 1000);
rooms.kitchen.addDoor('attic', 1800, 600);
rooms.kitchen.addKey(1000, 1200);
rooms.kitchen.addKey(600, 2000);
rooms.kitchen.addHiddenObject(1600, 800);
// Bedroom
rooms.bedroom = new Room('bedroom');
rooms.bedroom.addDoor('livingRoom', 200, 1800);
rooms.bedroom.addKey(1200, 800);
rooms.bedroom.addKey(800, 1800);
rooms.bedroom.addHiddenObject(1600, 1200);
rooms.bedroom.addHiddenObject(400, 1200);
// Attic
rooms.attic = new Room('attic');
rooms.attic.addDoor('kitchen', 200, 600);
rooms.attic.addKey(1000, 1000);
rooms.attic.addKey(1600, 1600);
rooms.attic.addHiddenObject(600, 800);
// Count total collectibles
for (var roomName in rooms) {
var room = rooms[roomName];
totalKeys += room.keys.length;
totalObjects += room.hiddenObjects.length;
}
}
// Create PowerPuff Girls
function createPowerPuffGirls() {
var types = ['blossom', 'bubbles', 'buttercup'];
var startX = 400;
for (var i = 0; i < types.length; i++) {
var girl = new PowerPuffGirl(types[i]);
girl.x = startX + i * 200;
girl.y = 2000;
powerPuffGirls.push(girl);
}
}
// Switch room function
game.switchRoom = function (roomName) {
if (currentRoom) {
game.removeChild(currentRoom);
}
currentRoom = rooms[roomName];
game.addChild(currentRoom);
// Add girls to new room
for (var i = 0; i < powerPuffGirls.length; i++) {
currentRoom.addChild(powerPuffGirls[i]);
}
// Update room name
var displayName = roomName.charAt(0).toUpperCase() + roomName.slice(1);
if (displayName === 'Livingroom') displayName = 'Living Room';
roomNameText.setText(displayName);
};
// Update score display
function updateScore() {
scoreText.setText('Keys: ' + keysCollected + '/' + totalKeys + ' | Objects: ' + objectsFound + '/' + totalObjects);
// Check win condition
if (keysCollected >= totalKeys && objectsFound >= totalObjects) {
LK.setTimeout(function () {
LK.showYouWin();
}, 1000);
}
}
// Touch controls
game.down = function (x, y, obj) {
// Check if touching a PowerPuff Girl
for (var i = 0; i < powerPuffGirls.length; i++) {
var girl = powerPuffGirls[i];
if (girl.parent === currentRoom) {
var localPos = girl.toLocal({
x: x,
y: y
});
if (Math.abs(localPos.x) < 60 && Math.abs(localPos.y) < 60) {
draggedGirl = girl;
return;
}
}
}
};
game.move = function (x, y, obj) {
if (draggedGirl) {
// Constrain movement within room bounds
var constrainedX = Math.max(100, Math.min(1948, x));
var constrainedY = Math.max(100, Math.min(2632, y));
draggedGirl.moveTo(constrainedX, constrainedY);
}
};
game.up = function (x, y, obj) {
draggedGirl = null;
};
// Initialize game
createRooms();
createPowerPuffGirls();
game.switchRoom('livingRoom');
updateScore();
// Main game loop
game.update = function () {
// Check for collisions between girls and interactive objects
for (var i = 0; i < powerPuffGirls.length; i++) {
var girl = powerPuffGirls[i];
if (girl.parent !== currentRoom) continue;
// Check key collisions
for (var j = 0; j < currentRoom.keys.length; j++) {
var key = currentRoom.keys[j];
if (!key.collected && girl.intersects(key)) {
key.collect();
break;
}
}
// Check hidden object collisions
for (var k = 0; k < currentRoom.hiddenObjects.length; k++) {
var obj = currentRoom.hiddenObjects[k];
if (!obj.found && girl.intersects(obj)) {
obj.discover();
break;
}
}
}
};