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!'); } };
===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,317 @@
-/****
+/****
+* 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: 0x000000
-});
\ No newline at end of file
+ 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!');
+ }
+};
\ No newline at end of file