Code edit (1 edits merged)
Please save this source code
User prompt
Puppet Show Director
Initial prompt
Toca puppet show (2004). Hold the red button to make the powerpuff girls puppets go crazy in the puppet show, then tap the green play button to make you video come to life in the tv, and then your powerpuff girls clapping and say bravo.
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); var facekit = LK.import("@upit/facekit.v1"); /**** * Classes ****/ var Button = Container.expand(function (assetId, color) { var self = Container.call(this); var buttonGraphics = self.attachAsset(assetId, { anchorX: 0.5, anchorY: 0.5 }); self.isPressed = false; self.down = function (x, y, obj) { self.isPressed = true; self.scaleX = 0.9; self.scaleY = 0.9; LK.getSound('buttonClick').play(); }; self.up = function (x, y, obj) { self.isPressed = false; self.scaleX = 1.0; self.scaleY = 1.0; }; return self; }); var Puppet = Container.expand(function (color) { var self = Container.call(this); var puppetGraphics = self.attachAsset(color, { anchorX: 0.5, anchorY: 1.0 }); self.isWild = false; self.originalX = 0; self.originalY = 0; self.wildTimer = 0; self.setPosition = function (x, y) { self.originalX = x; self.originalY = y; self.x = x; self.y = y; }; self.goWild = function () { self.isWild = true; }; self.calmDown = function () { self.isWild = false; tween(self, { x: self.originalX, y: self.originalY, rotation: 0 }, { duration: 500, easing: tween.easeOut }); }; self.applaud = function () { // Clapping animation tween(self, { scaleX: 1.2, scaleY: 1.2 }, { duration: 200, easing: tween.easeOut }); tween(self, { scaleX: 1.0, scaleY: 1.0 }, { duration: 200, easing: tween.easeOut }); }; self.update = function () { if (self.isWild) { self.wildTimer += 1; // Wild movements var intensity = 30; self.x = self.originalX + (Math.random() - 0.5) * intensity; self.y = self.originalY + (Math.random() - 0.5) * intensity; self.rotation = (Math.random() - 0.5) * 0.5; // Occasional jump if (self.wildTimer % 30 === 0) { tween(self, { y: self.originalY - 50 }, { duration: 300, easing: tween.easeOut }); tween(self, { y: self.originalY }, { duration: 300, easing: tween.easeIn }); } } }; return self; }); var Stage = Container.expand(function () { var self = Container.call(this); // Stage background var stageBackground = self.attachAsset('stage', { anchorX: 0.5, anchorY: 0.5 }); // Backdrop var backdrop = self.attachAsset('backdrop', { anchorX: 0.5, anchorY: 0.5 }); backdrop.y = -100; // Left curtain var leftCurtain = self.attachAsset('curtain', { anchorX: 1.0, anchorY: 0.5 }); leftCurtain.x = -700; leftCurtain.y = -100; // Right curtain var rightCurtain = self.attachAsset('curtain', { anchorX: 0.0, anchorY: 0.5 }); rightCurtain.x = 700; rightCurtain.y = -100; return self; }); var TVDisplay = Container.expand(function () { var self = Container.call(this); var tvFrame = self.attachAsset('tvFrame', { anchorX: 0.5, anchorY: 0.5 }); var tvScreen = self.attachAsset('tvScreen', { anchorX: 0.5, anchorY: 0.5 }); self.visible = false; self.show = function () { self.visible = true; tween(self, { scaleX: 1.0, scaleY: 1.0 }, { duration: 500, easing: tween.bounceOut }); }; self.hide = function () { tween(self, { scaleX: 0.0, scaleY: 0.0 }, { duration: 300, easing: tween.easeIn, onFinish: function onFinish() { self.visible = false; } }); }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x2F1B14 }); /**** * Game Code ****/ // Game state var gameState = 'puppet_show'; // 'puppet_show' or 'camera_mode' var redButtonPressed = false; var applauseTimer = 0; var bravoText = null; // Create stage var stage = game.addChild(new Stage()); stage.x = 2048 / 2; stage.y = 1400; // Create puppets var puppets = []; var puppet1 = new Puppet('puppet1'); var puppet2 = new Puppet('puppet2'); var puppet3 = new Puppet('puppet3'); puppet1.setPosition(-300, 0); puppet2.setPosition(0, 0); puppet3.setPosition(300, 0); stage.addChild(puppet1); stage.addChild(puppet2); stage.addChild(puppet3); puppets.push(puppet1, puppet2, puppet3); // Create buttons var redButton = game.addChild(new Button('redButton')); redButton.x = 400; redButton.y = 2400; var greenButton = game.addChild(new Button('greenButton')); greenButton.x = 1648; greenButton.y = 2400; // Create TV display var tvDisplay = game.addChild(new TVDisplay()); tvDisplay.x = 2048 / 2; tvDisplay.y = 800; tvDisplay.scaleX = 0.0; tvDisplay.scaleY = 0.0; // Create title text var titleText = new Text2('Puppet Show Director', { size: 80, fill: 0xFFD700 }); titleText.anchor.set(0.5, 0); LK.gui.top.addChild(titleText); titleText.y = 50; // Create instruction text var instructionText = new Text2('Hold RED to make puppets go wild!\nTap GREEN to appear on camera!', { size: 50, fill: 0xFFFFFF }); instructionText.anchor.set(0.5, 1); LK.gui.bottom.addChild(instructionText); instructionText.y = -100; // Red button event handling redButton.down = function (x, y, obj) { redButtonPressed = true; redButton.scaleX = 0.9; redButton.scaleY = 0.9; LK.getSound('buttonClick').play(); // Make puppets go wild for (var i = 0; i < puppets.length; i++) { puppets[i].goWild(); } }; redButton.up = function (x, y, obj) { redButtonPressed = false; redButton.scaleX = 1.0; redButton.scaleY = 1.0; // Calm down puppets for (var i = 0; i < puppets.length; i++) { puppets[i].calmDown(); } }; // Green button event handling greenButton.down = function (x, y, obj) { greenButton.scaleX = 0.9; greenButton.scaleY = 0.9; LK.getSound('buttonClick').play(); if (gameState === 'puppet_show') { // Switch to camera mode gameState = 'camera_mode'; tvDisplay.show(); // Make puppets applaud for (var i = 0; i < puppets.length; i++) { puppets[i].applaud(); } // Play applause sound LK.getSound('applause').play(); // Show bravo text if (bravoText) { bravoText.destroy(); } bravoText = new Text2('BRAVO!', { size: 120, fill: 0xFFD700 }); bravoText.anchor.set(0.5, 0.5); bravoText.x = 2048 / 2; bravoText.y = 1800; game.addChild(bravoText); // Animate bravo text tween(bravoText, { scaleX: 1.5, scaleY: 1.5 }, { duration: 300, easing: tween.bounceOut }); applauseTimer = 180; // 3 seconds at 60fps } else { // Switch back to puppet show gameState = 'puppet_show'; tvDisplay.hide(); if (bravoText) { bravoText.destroy(); bravoText = null; } } }; greenButton.up = function (x, y, obj) { greenButton.scaleX = 1.0; greenButton.scaleY = 1.0; }; // Game update loop game.update = function () { // Handle applause timer if (applauseTimer > 0) { applauseTimer--; // Make puppets continue applauding if (applauseTimer % 30 === 0) { for (var i = 0; i < puppets.length; i++) { puppets[i].applaud(); } } } // Update button instructions based on game state if (gameState === 'camera_mode') { instructionText.setText('You\'re on camera! Tap GREEN again to return to puppet show.'); } else { instructionText.setText('Hold RED to make puppets go wild!\nTap GREEN to appear on camera!'); } };
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
var facekit = LK.import("@upit/facekit.v1");
/****
* Classes
****/
var Button = Container.expand(function (assetId, color) {
var self = Container.call(this);
var buttonGraphics = self.attachAsset(assetId, {
anchorX: 0.5,
anchorY: 0.5
});
self.isPressed = false;
self.down = function (x, y, obj) {
self.isPressed = true;
self.scaleX = 0.9;
self.scaleY = 0.9;
LK.getSound('buttonClick').play();
};
self.up = function (x, y, obj) {
self.isPressed = false;
self.scaleX = 1.0;
self.scaleY = 1.0;
};
return self;
});
var Puppet = Container.expand(function (color) {
var self = Container.call(this);
var puppetGraphics = self.attachAsset(color, {
anchorX: 0.5,
anchorY: 1.0
});
self.isWild = false;
self.originalX = 0;
self.originalY = 0;
self.wildTimer = 0;
self.setPosition = function (x, y) {
self.originalX = x;
self.originalY = y;
self.x = x;
self.y = y;
};
self.goWild = function () {
self.isWild = true;
};
self.calmDown = function () {
self.isWild = false;
tween(self, {
x: self.originalX,
y: self.originalY,
rotation: 0
}, {
duration: 500,
easing: tween.easeOut
});
};
self.applaud = function () {
// Clapping animation
tween(self, {
scaleX: 1.2,
scaleY: 1.2
}, {
duration: 200,
easing: tween.easeOut
});
tween(self, {
scaleX: 1.0,
scaleY: 1.0
}, {
duration: 200,
easing: tween.easeOut
});
};
self.update = function () {
if (self.isWild) {
self.wildTimer += 1;
// Wild movements
var intensity = 30;
self.x = self.originalX + (Math.random() - 0.5) * intensity;
self.y = self.originalY + (Math.random() - 0.5) * intensity;
self.rotation = (Math.random() - 0.5) * 0.5;
// Occasional jump
if (self.wildTimer % 30 === 0) {
tween(self, {
y: self.originalY - 50
}, {
duration: 300,
easing: tween.easeOut
});
tween(self, {
y: self.originalY
}, {
duration: 300,
easing: tween.easeIn
});
}
}
};
return self;
});
var Stage = Container.expand(function () {
var self = Container.call(this);
// Stage background
var stageBackground = self.attachAsset('stage', {
anchorX: 0.5,
anchorY: 0.5
});
// Backdrop
var backdrop = self.attachAsset('backdrop', {
anchorX: 0.5,
anchorY: 0.5
});
backdrop.y = -100;
// Left curtain
var leftCurtain = self.attachAsset('curtain', {
anchorX: 1.0,
anchorY: 0.5
});
leftCurtain.x = -700;
leftCurtain.y = -100;
// Right curtain
var rightCurtain = self.attachAsset('curtain', {
anchorX: 0.0,
anchorY: 0.5
});
rightCurtain.x = 700;
rightCurtain.y = -100;
return self;
});
var TVDisplay = Container.expand(function () {
var self = Container.call(this);
var tvFrame = self.attachAsset('tvFrame', {
anchorX: 0.5,
anchorY: 0.5
});
var tvScreen = self.attachAsset('tvScreen', {
anchorX: 0.5,
anchorY: 0.5
});
self.visible = false;
self.show = function () {
self.visible = true;
tween(self, {
scaleX: 1.0,
scaleY: 1.0
}, {
duration: 500,
easing: tween.bounceOut
});
};
self.hide = function () {
tween(self, {
scaleX: 0.0,
scaleY: 0.0
}, {
duration: 300,
easing: tween.easeIn,
onFinish: function onFinish() {
self.visible = false;
}
});
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x2F1B14
});
/****
* Game Code
****/
// Game state
var gameState = 'puppet_show'; // 'puppet_show' or 'camera_mode'
var redButtonPressed = false;
var applauseTimer = 0;
var bravoText = null;
// Create stage
var stage = game.addChild(new Stage());
stage.x = 2048 / 2;
stage.y = 1400;
// Create puppets
var puppets = [];
var puppet1 = new Puppet('puppet1');
var puppet2 = new Puppet('puppet2');
var puppet3 = new Puppet('puppet3');
puppet1.setPosition(-300, 0);
puppet2.setPosition(0, 0);
puppet3.setPosition(300, 0);
stage.addChild(puppet1);
stage.addChild(puppet2);
stage.addChild(puppet3);
puppets.push(puppet1, puppet2, puppet3);
// Create buttons
var redButton = game.addChild(new Button('redButton'));
redButton.x = 400;
redButton.y = 2400;
var greenButton = game.addChild(new Button('greenButton'));
greenButton.x = 1648;
greenButton.y = 2400;
// Create TV display
var tvDisplay = game.addChild(new TVDisplay());
tvDisplay.x = 2048 / 2;
tvDisplay.y = 800;
tvDisplay.scaleX = 0.0;
tvDisplay.scaleY = 0.0;
// Create title text
var titleText = new Text2('Puppet Show Director', {
size: 80,
fill: 0xFFD700
});
titleText.anchor.set(0.5, 0);
LK.gui.top.addChild(titleText);
titleText.y = 50;
// Create instruction text
var instructionText = new Text2('Hold RED to make puppets go wild!\nTap GREEN to appear on camera!', {
size: 50,
fill: 0xFFFFFF
});
instructionText.anchor.set(0.5, 1);
LK.gui.bottom.addChild(instructionText);
instructionText.y = -100;
// Red button event handling
redButton.down = function (x, y, obj) {
redButtonPressed = true;
redButton.scaleX = 0.9;
redButton.scaleY = 0.9;
LK.getSound('buttonClick').play();
// Make puppets go wild
for (var i = 0; i < puppets.length; i++) {
puppets[i].goWild();
}
};
redButton.up = function (x, y, obj) {
redButtonPressed = false;
redButton.scaleX = 1.0;
redButton.scaleY = 1.0;
// Calm down puppets
for (var i = 0; i < puppets.length; i++) {
puppets[i].calmDown();
}
};
// Green button event handling
greenButton.down = function (x, y, obj) {
greenButton.scaleX = 0.9;
greenButton.scaleY = 0.9;
LK.getSound('buttonClick').play();
if (gameState === 'puppet_show') {
// Switch to camera mode
gameState = 'camera_mode';
tvDisplay.show();
// Make puppets applaud
for (var i = 0; i < puppets.length; i++) {
puppets[i].applaud();
}
// Play applause sound
LK.getSound('applause').play();
// Show bravo text
if (bravoText) {
bravoText.destroy();
}
bravoText = new Text2('BRAVO!', {
size: 120,
fill: 0xFFD700
});
bravoText.anchor.set(0.5, 0.5);
bravoText.x = 2048 / 2;
bravoText.y = 1800;
game.addChild(bravoText);
// Animate bravo text
tween(bravoText, {
scaleX: 1.5,
scaleY: 1.5
}, {
duration: 300,
easing: tween.bounceOut
});
applauseTimer = 180; // 3 seconds at 60fps
} else {
// Switch back to puppet show
gameState = 'puppet_show';
tvDisplay.hide();
if (bravoText) {
bravoText.destroy();
bravoText = null;
}
}
};
greenButton.up = function (x, y, obj) {
greenButton.scaleX = 1.0;
greenButton.scaleY = 1.0;
};
// Game update loop
game.update = function () {
// Handle applause timer
if (applauseTimer > 0) {
applauseTimer--;
// Make puppets continue applauding
if (applauseTimer % 30 === 0) {
for (var i = 0; i < puppets.length; i++) {
puppets[i].applaud();
}
}
}
// Update button instructions based on game state
if (gameState === 'camera_mode') {
instructionText.setText('You\'re on camera! Tap GREEN again to return to puppet show.');
} else {
instructionText.setText('Hold RED to make puppets go wild!\nTap GREEN to appear on camera!');
}
};