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