Code edit (1 edits merged)
Please save this source code
User prompt
Christmas TV & Cola Kaboom
Initial prompt
Toca 12 days of Christmas (2014). The powerpuff girls have a video on the tv and a Coca Cola can. Tap on the play button to watch the 5 days of Christmas on the tv, tap on the Coca Cola can to watch it go kaboom.
/**** 
* Plugins
****/ 
var tween = LK.import("@upit/tween.v1");
/**** 
* Classes
****/ 
var CocaCola = Container.expand(function () {
	var self = Container.call(this);
	var body = self.attachAsset('colaBody', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	var top = self.attachAsset('colaTop', {
		anchorX: 0.5,
		anchorY: 0.5,
		y: -170
	});
	var label = self.attachAsset('colaLabel', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.isExploded = false;
	self.particles = [];
	self.explode = function () {
		if (self.isExploded) return;
		self.isExploded = true;
		// Hide can
		body.alpha = 0;
		top.alpha = 0;
		label.alpha = 0;
		// Create particles
		for (var i = 0; i < 20; i++) {
			var particle = self.attachAsset('particle', {
				anchorX: 0.5,
				anchorY: 0.5,
				x: Math.random() * 40 - 20,
				y: Math.random() * 40 - 20
			});
			self.particles.push(particle);
			// Animate particle
			var targetX = Math.random() * 400 - 200;
			var targetY = Math.random() * 400 - 200;
			tween(particle, {
				x: targetX,
				y: targetY,
				alpha: 0,
				scaleX: 0.1,
				scaleY: 0.1
			}, {
				duration: 1000,
				easing: tween.easeOut
			});
		}
		// Screen shake effect
		LK.effects.flashScreen(0xffa500, 300);
		// Play explosion sound
		LK.getSound('explosion').play();
		// Regenerate can after 2 seconds
		LK.setTimeout(function () {
			self.regenerate();
		}, 2000);
	};
	self.regenerate = function () {
		// Reset can visibility
		body.alpha = 1;
		top.alpha = 1;
		label.alpha = 1;
		// Remove particles
		for (var i = 0; i < self.particles.length; i++) {
			self.particles[i].destroy();
		}
		self.particles = [];
		self.isExploded = false;
		// Bounce in animation
		self.scaleX = 0;
		self.scaleY = 0;
		tween(self, {
			scaleX: 1,
			scaleY: 1
		}, {
			duration: 500,
			easing: tween.bounceOut
		});
	};
	self.down = function (x, y, obj) {
		self.explode();
	};
	return self;
});
var TV = Container.expand(function () {
	var self = Container.call(this);
	// TV body
	var body = self.attachAsset('tvBody', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	// TV screen
	var screen = self.attachAsset('tvScreen', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	// Video content (hidden initially)
	var videoContent = self.attachAsset('videoContent', {
		anchorX: 0.5,
		anchorY: 0.5,
		alpha: 0
	});
	// Play button
	var playButton = self.attachAsset('playButton', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	// Speakers
	var leftSpeaker = self.attachAsset('speaker', {
		anchorX: 0.5,
		anchorY: 0.5,
		x: -150,
		y: -100
	});
	var rightSpeaker = self.attachAsset('speaker', {
		anchorX: 0.5,
		anchorY: 0.5,
		x: 150,
		y: -100
	});
	// Scan lines
	var scanLine1 = self.attachAsset('scanLine', {
		anchorX: 0.5,
		anchorY: 0.5,
		y: -50,
		alpha: 0
	});
	var scanLine2 = self.attachAsset('scanLine', {
		anchorX: 0.5,
		anchorY: 0.5,
		y: 50,
		alpha: 0
	});
	self.isPlaying = false;
	self.scanLineTimer = null;
	self.startVideo = function () {
		if (self.isPlaying) return;
		self.isPlaying = true;
		playButton.alpha = 0;
		videoContent.alpha = 1;
		// Show scan lines with animation
		scanLine1.alpha = 0.3;
		scanLine2.alpha = 0.3;
		// Animate scan lines
		self.scanLineTimer = LK.setInterval(function () {
			tween(scanLine1, {
				y: scanLine1.y + 10
			}, {
				duration: 100
			});
			tween(scanLine2, {
				y: scanLine2.y - 10
			}, {
				duration: 100
			});
			if (scanLine1.y > 150) scanLine1.y = -150;
			if (scanLine2.y < -150) scanLine2.y = 150;
		}, 100);
		// Video duration simulation (10 seconds)
		LK.setTimeout(function () {
			self.stopVideo();
		}, 10000);
		LK.getSound('tvClick').play();
	};
	self.stopVideo = function () {
		if (!self.isPlaying) return;
		self.isPlaying = false;
		playButton.alpha = 1;
		videoContent.alpha = 0;
		scanLine1.alpha = 0;
		scanLine2.alpha = 0;
		if (self.scanLineTimer) {
			LK.clearInterval(self.scanLineTimer);
			self.scanLineTimer = null;
		}
	};
	self.down = function (x, y, obj) {
		if (!self.isPlaying) {
			self.startVideo();
		} else {
			self.stopVideo();
		}
	};
	return self;
});
/**** 
* Initialize Game
****/ 
var game = new LK.Game({
	backgroundColor: 0x2d5016
});
/**** 
* Game Code
****/ 
// Create Christmas background elements
var backgroundSnow = [];
for (var i = 0; i < 30; i++) {
	var snowflake = LK.getAsset('particle', {
		anchorX: 0.5,
		anchorY: 0.5,
		x: Math.random() * 2048,
		y: Math.random() * 2732,
		scaleX: 0.5,
		scaleY: 0.5,
		tint: 0xffffff
	});
	game.addChild(snowflake);
	backgroundSnow.push(snowflake);
}
// Create and position TV
var tv = game.addChild(new TV());
tv.x = 1024;
tv.y = 1000;
// Create and position Coca Cola can
var cocaCola = game.addChild(new CocaCola());
cocaCola.x = 1500;
cocaCola.y = 1400;
// Add title text
var titleText = new Text2('Christmas TV & Cola Kaboom', {
	size: 80,
	fill: 0xFFFFFF
});
titleText.anchor.set(0.5, 0);
titleText.x = 1024;
titleText.y = 200;
game.addChild(titleText);
// Add instruction text
var instructionText = new Text2('Tap TV to watch • Tap Cola to explode', {
	size: 50,
	fill: 0xFFDDDD
});
instructionText.anchor.set(0.5, 0);
instructionText.x = 1024;
instructionText.y = 2400;
game.addChild(instructionText);
// Animate falling snow
game.update = function () {
	for (var i = 0; i < backgroundSnow.length; i++) {
		var snowflake = backgroundSnow[i];
		snowflake.y += 2;
		snowflake.x += Math.sin(LK.ticks * 0.01 + i) * 0.5;
		if (snowflake.y > 2732) {
			snowflake.y = -50;
			snowflake.x = Math.random() * 2048;
		}
	}
}; ===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,256 @@
-/****
+/**** 
+* Plugins
+****/ 
+var tween = LK.import("@upit/tween.v1");
+
+/**** 
+* Classes
+****/ 
+var CocaCola = Container.expand(function () {
+	var self = Container.call(this);
+	var body = self.attachAsset('colaBody', {
+		anchorX: 0.5,
+		anchorY: 0.5
+	});
+	var top = self.attachAsset('colaTop', {
+		anchorX: 0.5,
+		anchorY: 0.5,
+		y: -170
+	});
+	var label = self.attachAsset('colaLabel', {
+		anchorX: 0.5,
+		anchorY: 0.5
+	});
+	self.isExploded = false;
+	self.particles = [];
+	self.explode = function () {
+		if (self.isExploded) return;
+		self.isExploded = true;
+		// Hide can
+		body.alpha = 0;
+		top.alpha = 0;
+		label.alpha = 0;
+		// Create particles
+		for (var i = 0; i < 20; i++) {
+			var particle = self.attachAsset('particle', {
+				anchorX: 0.5,
+				anchorY: 0.5,
+				x: Math.random() * 40 - 20,
+				y: Math.random() * 40 - 20
+			});
+			self.particles.push(particle);
+			// Animate particle
+			var targetX = Math.random() * 400 - 200;
+			var targetY = Math.random() * 400 - 200;
+			tween(particle, {
+				x: targetX,
+				y: targetY,
+				alpha: 0,
+				scaleX: 0.1,
+				scaleY: 0.1
+			}, {
+				duration: 1000,
+				easing: tween.easeOut
+			});
+		}
+		// Screen shake effect
+		LK.effects.flashScreen(0xffa500, 300);
+		// Play explosion sound
+		LK.getSound('explosion').play();
+		// Regenerate can after 2 seconds
+		LK.setTimeout(function () {
+			self.regenerate();
+		}, 2000);
+	};
+	self.regenerate = function () {
+		// Reset can visibility
+		body.alpha = 1;
+		top.alpha = 1;
+		label.alpha = 1;
+		// Remove particles
+		for (var i = 0; i < self.particles.length; i++) {
+			self.particles[i].destroy();
+		}
+		self.particles = [];
+		self.isExploded = false;
+		// Bounce in animation
+		self.scaleX = 0;
+		self.scaleY = 0;
+		tween(self, {
+			scaleX: 1,
+			scaleY: 1
+		}, {
+			duration: 500,
+			easing: tween.bounceOut
+		});
+	};
+	self.down = function (x, y, obj) {
+		self.explode();
+	};
+	return self;
+});
+var TV = Container.expand(function () {
+	var self = Container.call(this);
+	// TV body
+	var body = self.attachAsset('tvBody', {
+		anchorX: 0.5,
+		anchorY: 0.5
+	});
+	// TV screen
+	var screen = self.attachAsset('tvScreen', {
+		anchorX: 0.5,
+		anchorY: 0.5
+	});
+	// Video content (hidden initially)
+	var videoContent = self.attachAsset('videoContent', {
+		anchorX: 0.5,
+		anchorY: 0.5,
+		alpha: 0
+	});
+	// Play button
+	var playButton = self.attachAsset('playButton', {
+		anchorX: 0.5,
+		anchorY: 0.5
+	});
+	// Speakers
+	var leftSpeaker = self.attachAsset('speaker', {
+		anchorX: 0.5,
+		anchorY: 0.5,
+		x: -150,
+		y: -100
+	});
+	var rightSpeaker = self.attachAsset('speaker', {
+		anchorX: 0.5,
+		anchorY: 0.5,
+		x: 150,
+		y: -100
+	});
+	// Scan lines
+	var scanLine1 = self.attachAsset('scanLine', {
+		anchorX: 0.5,
+		anchorY: 0.5,
+		y: -50,
+		alpha: 0
+	});
+	var scanLine2 = self.attachAsset('scanLine', {
+		anchorX: 0.5,
+		anchorY: 0.5,
+		y: 50,
+		alpha: 0
+	});
+	self.isPlaying = false;
+	self.scanLineTimer = null;
+	self.startVideo = function () {
+		if (self.isPlaying) return;
+		self.isPlaying = true;
+		playButton.alpha = 0;
+		videoContent.alpha = 1;
+		// Show scan lines with animation
+		scanLine1.alpha = 0.3;
+		scanLine2.alpha = 0.3;
+		// Animate scan lines
+		self.scanLineTimer = LK.setInterval(function () {
+			tween(scanLine1, {
+				y: scanLine1.y + 10
+			}, {
+				duration: 100
+			});
+			tween(scanLine2, {
+				y: scanLine2.y - 10
+			}, {
+				duration: 100
+			});
+			if (scanLine1.y > 150) scanLine1.y = -150;
+			if (scanLine2.y < -150) scanLine2.y = 150;
+		}, 100);
+		// Video duration simulation (10 seconds)
+		LK.setTimeout(function () {
+			self.stopVideo();
+		}, 10000);
+		LK.getSound('tvClick').play();
+	};
+	self.stopVideo = function () {
+		if (!self.isPlaying) return;
+		self.isPlaying = false;
+		playButton.alpha = 1;
+		videoContent.alpha = 0;
+		scanLine1.alpha = 0;
+		scanLine2.alpha = 0;
+		if (self.scanLineTimer) {
+			LK.clearInterval(self.scanLineTimer);
+			self.scanLineTimer = null;
+		}
+	};
+	self.down = function (x, y, obj) {
+		if (!self.isPlaying) {
+			self.startVideo();
+		} else {
+			self.stopVideo();
+		}
+	};
+	return self;
+});
+
+/**** 
 * Initialize Game
-****/
+****/ 
 var game = new LK.Game({
-	backgroundColor: 0x000000
-});
\ No newline at end of file
+	backgroundColor: 0x2d5016
+});
+
+/**** 
+* Game Code
+****/ 
+// Create Christmas background elements
+var backgroundSnow = [];
+for (var i = 0; i < 30; i++) {
+	var snowflake = LK.getAsset('particle', {
+		anchorX: 0.5,
+		anchorY: 0.5,
+		x: Math.random() * 2048,
+		y: Math.random() * 2732,
+		scaleX: 0.5,
+		scaleY: 0.5,
+		tint: 0xffffff
+	});
+	game.addChild(snowflake);
+	backgroundSnow.push(snowflake);
+}
+// Create and position TV
+var tv = game.addChild(new TV());
+tv.x = 1024;
+tv.y = 1000;
+// Create and position Coca Cola can
+var cocaCola = game.addChild(new CocaCola());
+cocaCola.x = 1500;
+cocaCola.y = 1400;
+// Add title text
+var titleText = new Text2('Christmas TV & Cola Kaboom', {
+	size: 80,
+	fill: 0xFFFFFF
+});
+titleText.anchor.set(0.5, 0);
+titleText.x = 1024;
+titleText.y = 200;
+game.addChild(titleText);
+// Add instruction text
+var instructionText = new Text2('Tap TV to watch • Tap Cola to explode', {
+	size: 50,
+	fill: 0xFFDDDD
+});
+instructionText.anchor.set(0.5, 0);
+instructionText.x = 1024;
+instructionText.y = 2400;
+game.addChild(instructionText);
+// Animate falling snow
+game.update = function () {
+	for (var i = 0; i < backgroundSnow.length; i++) {
+		var snowflake = backgroundSnow[i];
+		snowflake.y += 2;
+		snowflake.x += Math.sin(LK.ticks * 0.01 + i) * 0.5;
+		if (snowflake.y > 2732) {
+			snowflake.y = -50;
+			snowflake.x = Math.random() * 2048;
+		}
+	}
+};
\ No newline at end of file