Code edit (1 edits merged)
Please save this source code
User prompt
Pango's Wake-Up Call
Initial prompt
Pango the blue raccoon π: skunk π€ has over slept π. Find a way to wake her up. Remember last time you will tap on the gong π©Ά to make the tea time monsters wake her up, or tap on the mr beaky π to wake her up.
/**** 
* Plugins
****/ 
var tween = LK.import("@upit/tween.v1");
/**** 
* Classes
****/ 
var Gong = Container.expand(function () {
	var self = Container.call(this);
	var gongGraphics = self.attachAsset('gong', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.ring = function () {
		LK.getSound('gongSound').play();
		// Visual ring effect
		tween(gongGraphics, {
			scaleX: 1.1,
			scaleY: 1.1
		}, {
			duration: 100
		});
		tween(gongGraphics, {
			scaleX: 1.0,
			scaleY: 1.0
		}, {
			duration: 300
		});
		// Spawn tea monsters
		for (var i = 0; i < 3; i++) {
			var monster = new TeaMonster();
			var spawnX = self.x + (Math.random() - 0.5) * 300;
			var spawnY = self.y + (Math.random() - 0.5) * 300;
			monster.initialize(spawnX, spawnY);
			game.addChild(monster);
			teaMonsters.push(monster);
			// Play monster noise with delay
			LK.setTimeout(function () {
				LK.getSound('monsterNoise').play();
			}, i * 200);
		}
	};
	self.down = function (x, y, obj) {
		self.ring();
		noiseLevel += 15;
		pango.cheer();
		sleepingSkunk.stir(15);
	};
	return self;
});
var MrBeaky = Container.expand(function () {
	var self = Container.call(this);
	var beakyGraphics = self.attachAsset('mrBeaky', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.chirp = function () {
		LK.getSound('birdChirp').play();
		// Flapping animation
		tween(beakyGraphics, {
			scaleY: 1.3
		}, {
			duration: 100
		});
		tween(beakyGraphics, {
			scaleY: 1.0
		}, {
			duration: 200
		});
		// Wing flap effect
		tween(self, {
			rotation: 0.2
		}, {
			duration: 100
		});
		tween(self, {
			rotation: -0.2
		}, {
			duration: 100
		});
		tween(self, {
			rotation: 0
		}, {
			duration: 100
		});
	};
	self.down = function (x, y, obj) {
		self.chirp();
		noiseLevel += 10;
		pango.cheer();
		sleepingSkunk.stir(10);
	};
	return self;
});
var Pango = Container.expand(function () {
	var self = Container.call(this);
	var pangoGraphics = self.attachAsset('pango', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.cheer = function () {
		// Pango cheers when noise is made
		tween(self, {
			y: self.y - 20
		}, {
			duration: 150
		});
		tween(self, {
			y: self.y
		}, {
			duration: 150
		});
	};
	return self;
});
var SleepingSkunk = Container.expand(function () {
	var self = Container.call(this);
	var skunkGraphics = self.attachAsset('sleepingSkunk', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.awakeLevel = 0;
	self.isAwake = false;
	self.stir = function (amount) {
		if (self.isAwake) return;
		self.awakeLevel += amount;
		// Visual stirring effect
		var stirAmount = Math.min(self.awakeLevel / 100, 1) * 10;
		tween(self, {
			rotation: stirAmount * 0.1
		}, {
			duration: 200
		});
		tween(self, {
			rotation: -stirAmount * 0.1
		}, {
			duration: 200
		});
		if (self.awakeLevel >= 100 && !self.isAwake) {
			self.wakeUp();
		}
	};
	self.wakeUp = function () {
		self.isAwake = true;
		LK.getSound('wakeUpSound').play();
		// Wake up animation
		tween(skunkGraphics, {
			scaleX: 1.2,
			scaleY: 1.2
		}, {
			duration: 500
		});
		tween(skunkGraphics, {
			tint: 0xFFFFFF
		}, {
			duration: 1000
		});
		// Show success after delay
		LK.setTimeout(function () {
			LK.showYouWin();
		}, 1500);
	};
	return self;
});
var TeaMonster = Container.expand(function () {
	var self = Container.call(this);
	var monsterGraphics = self.attachAsset('teaMonster', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.startX = 0;
	self.startY = 0;
	self.lifespan = 0;
	self.maxLifespan = 120; // 2 seconds at 60fps
	self.initialize = function (startX, startY) {
		self.startX = startX;
		self.startY = startY;
		self.x = startX;
		self.y = startY;
		self.lifespan = 0;
		// Animate the monster appearing
		monsterGraphics.scaleX = 0;
		monsterGraphics.scaleY = 0;
		tween(monsterGraphics, {
			scaleX: 1,
			scaleY: 1
		}, {
			duration: 200
		});
		// Make it bounce around
		self.animateMovement();
	};
	self.animateMovement = function () {
		var targetX = self.startX + (Math.random() - 0.5) * 200;
		var targetY = self.startY + (Math.random() - 0.5) * 200;
		tween(self, {
			x: targetX,
			y: targetY
		}, {
			duration: 800,
			easing: tween.easeInOut,
			onFinish: function onFinish() {
				if (self.lifespan < self.maxLifespan) {
					self.animateMovement();
				}
			}
		});
	};
	self.update = function () {
		self.lifespan++;
		if (self.lifespan >= self.maxLifespan) {
			// Fade out
			tween(monsterGraphics, {
				alpha: 0
			}, {
				duration: 300
			});
		}
	};
	return self;
});
/**** 
* Initialize Game
****/ 
var game = new LK.Game({
	backgroundColor: 0x87CEEB
});
/**** 
* Game Code
****/ 
// Game variables
var noiseLevel = 0;
var maxNoiseLevel = 100;
var teaMonsters = [];
// Create background
var background = game.attachAsset('background', {
	x: 0,
	y: 0
});
// Create sleeping skunk in center
var sleepingSkunk = game.addChild(new SleepingSkunk());
sleepingSkunk.x = 1024;
sleepingSkunk.y = 1366;
// Create Pango nearby
var pango = game.addChild(new Pango());
pango.x = 700;
pango.y = 1200;
// Create gong
var gong = game.addChild(new Gong());
gong.x = 400;
gong.y = 1500;
// Create Mr. Beaky
var mrBeaky = game.addChild(new MrBeaky());
mrBeaky.x = 1600;
mrBeaky.y = 1000;
// Create noise meter
var noiseMeterBg = LK.getAsset('noiseMeterBg', {
	anchorX: 0.5,
	anchorY: 0.5
});
var noiseMeterFill = LK.getAsset('noiseMeterFill', {
	anchorX: 0,
	anchorY: 0.5
});
// Add noise meter to GUI
LK.gui.top.addChild(noiseMeterBg);
noiseMeterBg.x = LK.gui.top.width / 2;
noiseMeterBg.y = 100;
noiseMeterBg.addChild(noiseMeterFill);
noiseMeterFill.x = -145;
noiseMeterFill.y = 0;
// Title text
var titleText = new Text2('Help Pango Wake Up His Friend!', {
	size: 80,
	fill: 0xFFFFFF
});
titleText.anchor.set(0.5, 0);
LK.gui.top.addChild(titleText);
titleText.x = LK.gui.top.width / 2;
titleText.y = 20;
// Instruction text
var instructionText = new Text2('Tap the gong or Mr. Beaky to make noise!', {
	size: 60,
	fill: 0xFFFF00
});
instructionText.anchor.set(0.5, 1);
LK.gui.bottom.addChild(instructionText);
instructionText.x = LK.gui.bottom.width / 2;
instructionText.y = -50;
// Game update loop
game.update = function () {
	// Update noise meter visual
	var fillWidth = Math.max(10, noiseLevel / maxNoiseLevel * 290);
	noiseMeterFill.width = fillWidth;
	// Update noise meter color based on level
	if (noiseLevel < 30) {
		noiseMeterFill.tint = 0x00FF00; // Green
	} else if (noiseLevel < 70) {
		noiseMeterFill.tint = 0xFFFF00; // Yellow
	} else {
		noiseMeterFill.tint = 0xFF0000; // Red
	}
	// Gradually decrease noise level over time
	if (noiseLevel > 0 && LK.ticks % 30 == 0) {
		noiseLevel = Math.max(0, noiseLevel - 2);
	}
	// Clean up expired tea monsters
	for (var i = teaMonsters.length - 1; i >= 0; i--) {
		var monster = teaMonsters[i];
		if (monster.lifespan >= monster.maxLifespan + 20) {
			// Extra time for fade out
			monster.destroy();
			teaMonsters.splice(i, 1);
		}
	}
}; ===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,319 @@
-/****
+/**** 
+* Plugins
+****/ 
+var tween = LK.import("@upit/tween.v1");
+
+/**** 
+* Classes
+****/ 
+var Gong = Container.expand(function () {
+	var self = Container.call(this);
+	var gongGraphics = self.attachAsset('gong', {
+		anchorX: 0.5,
+		anchorY: 0.5
+	});
+	self.ring = function () {
+		LK.getSound('gongSound').play();
+		// Visual ring effect
+		tween(gongGraphics, {
+			scaleX: 1.1,
+			scaleY: 1.1
+		}, {
+			duration: 100
+		});
+		tween(gongGraphics, {
+			scaleX: 1.0,
+			scaleY: 1.0
+		}, {
+			duration: 300
+		});
+		// Spawn tea monsters
+		for (var i = 0; i < 3; i++) {
+			var monster = new TeaMonster();
+			var spawnX = self.x + (Math.random() - 0.5) * 300;
+			var spawnY = self.y + (Math.random() - 0.5) * 300;
+			monster.initialize(spawnX, spawnY);
+			game.addChild(monster);
+			teaMonsters.push(monster);
+			// Play monster noise with delay
+			LK.setTimeout(function () {
+				LK.getSound('monsterNoise').play();
+			}, i * 200);
+		}
+	};
+	self.down = function (x, y, obj) {
+		self.ring();
+		noiseLevel += 15;
+		pango.cheer();
+		sleepingSkunk.stir(15);
+	};
+	return self;
+});
+var MrBeaky = Container.expand(function () {
+	var self = Container.call(this);
+	var beakyGraphics = self.attachAsset('mrBeaky', {
+		anchorX: 0.5,
+		anchorY: 0.5
+	});
+	self.chirp = function () {
+		LK.getSound('birdChirp').play();
+		// Flapping animation
+		tween(beakyGraphics, {
+			scaleY: 1.3
+		}, {
+			duration: 100
+		});
+		tween(beakyGraphics, {
+			scaleY: 1.0
+		}, {
+			duration: 200
+		});
+		// Wing flap effect
+		tween(self, {
+			rotation: 0.2
+		}, {
+			duration: 100
+		});
+		tween(self, {
+			rotation: -0.2
+		}, {
+			duration: 100
+		});
+		tween(self, {
+			rotation: 0
+		}, {
+			duration: 100
+		});
+	};
+	self.down = function (x, y, obj) {
+		self.chirp();
+		noiseLevel += 10;
+		pango.cheer();
+		sleepingSkunk.stir(10);
+	};
+	return self;
+});
+var Pango = Container.expand(function () {
+	var self = Container.call(this);
+	var pangoGraphics = self.attachAsset('pango', {
+		anchorX: 0.5,
+		anchorY: 0.5
+	});
+	self.cheer = function () {
+		// Pango cheers when noise is made
+		tween(self, {
+			y: self.y - 20
+		}, {
+			duration: 150
+		});
+		tween(self, {
+			y: self.y
+		}, {
+			duration: 150
+		});
+	};
+	return self;
+});
+var SleepingSkunk = Container.expand(function () {
+	var self = Container.call(this);
+	var skunkGraphics = self.attachAsset('sleepingSkunk', {
+		anchorX: 0.5,
+		anchorY: 0.5
+	});
+	self.awakeLevel = 0;
+	self.isAwake = false;
+	self.stir = function (amount) {
+		if (self.isAwake) return;
+		self.awakeLevel += amount;
+		// Visual stirring effect
+		var stirAmount = Math.min(self.awakeLevel / 100, 1) * 10;
+		tween(self, {
+			rotation: stirAmount * 0.1
+		}, {
+			duration: 200
+		});
+		tween(self, {
+			rotation: -stirAmount * 0.1
+		}, {
+			duration: 200
+		});
+		if (self.awakeLevel >= 100 && !self.isAwake) {
+			self.wakeUp();
+		}
+	};
+	self.wakeUp = function () {
+		self.isAwake = true;
+		LK.getSound('wakeUpSound').play();
+		// Wake up animation
+		tween(skunkGraphics, {
+			scaleX: 1.2,
+			scaleY: 1.2
+		}, {
+			duration: 500
+		});
+		tween(skunkGraphics, {
+			tint: 0xFFFFFF
+		}, {
+			duration: 1000
+		});
+		// Show success after delay
+		LK.setTimeout(function () {
+			LK.showYouWin();
+		}, 1500);
+	};
+	return self;
+});
+var TeaMonster = Container.expand(function () {
+	var self = Container.call(this);
+	var monsterGraphics = self.attachAsset('teaMonster', {
+		anchorX: 0.5,
+		anchorY: 0.5
+	});
+	self.startX = 0;
+	self.startY = 0;
+	self.lifespan = 0;
+	self.maxLifespan = 120; // 2 seconds at 60fps
+	self.initialize = function (startX, startY) {
+		self.startX = startX;
+		self.startY = startY;
+		self.x = startX;
+		self.y = startY;
+		self.lifespan = 0;
+		// Animate the monster appearing
+		monsterGraphics.scaleX = 0;
+		monsterGraphics.scaleY = 0;
+		tween(monsterGraphics, {
+			scaleX: 1,
+			scaleY: 1
+		}, {
+			duration: 200
+		});
+		// Make it bounce around
+		self.animateMovement();
+	};
+	self.animateMovement = function () {
+		var targetX = self.startX + (Math.random() - 0.5) * 200;
+		var targetY = self.startY + (Math.random() - 0.5) * 200;
+		tween(self, {
+			x: targetX,
+			y: targetY
+		}, {
+			duration: 800,
+			easing: tween.easeInOut,
+			onFinish: function onFinish() {
+				if (self.lifespan < self.maxLifespan) {
+					self.animateMovement();
+				}
+			}
+		});
+	};
+	self.update = function () {
+		self.lifespan++;
+		if (self.lifespan >= self.maxLifespan) {
+			// Fade out
+			tween(monsterGraphics, {
+				alpha: 0
+			}, {
+				duration: 300
+			});
+		}
+	};
+	return self;
+});
+
+/**** 
 * Initialize Game
-****/
+****/ 
 var game = new LK.Game({
-	backgroundColor: 0x000000
-});
\ No newline at end of file
+	backgroundColor: 0x87CEEB
+});
+
+/**** 
+* Game Code
+****/ 
+// Game variables
+var noiseLevel = 0;
+var maxNoiseLevel = 100;
+var teaMonsters = [];
+// Create background
+var background = game.attachAsset('background', {
+	x: 0,
+	y: 0
+});
+// Create sleeping skunk in center
+var sleepingSkunk = game.addChild(new SleepingSkunk());
+sleepingSkunk.x = 1024;
+sleepingSkunk.y = 1366;
+// Create Pango nearby
+var pango = game.addChild(new Pango());
+pango.x = 700;
+pango.y = 1200;
+// Create gong
+var gong = game.addChild(new Gong());
+gong.x = 400;
+gong.y = 1500;
+// Create Mr. Beaky
+var mrBeaky = game.addChild(new MrBeaky());
+mrBeaky.x = 1600;
+mrBeaky.y = 1000;
+// Create noise meter
+var noiseMeterBg = LK.getAsset('noiseMeterBg', {
+	anchorX: 0.5,
+	anchorY: 0.5
+});
+var noiseMeterFill = LK.getAsset('noiseMeterFill', {
+	anchorX: 0,
+	anchorY: 0.5
+});
+// Add noise meter to GUI
+LK.gui.top.addChild(noiseMeterBg);
+noiseMeterBg.x = LK.gui.top.width / 2;
+noiseMeterBg.y = 100;
+noiseMeterBg.addChild(noiseMeterFill);
+noiseMeterFill.x = -145;
+noiseMeterFill.y = 0;
+// Title text
+var titleText = new Text2('Help Pango Wake Up His Friend!', {
+	size: 80,
+	fill: 0xFFFFFF
+});
+titleText.anchor.set(0.5, 0);
+LK.gui.top.addChild(titleText);
+titleText.x = LK.gui.top.width / 2;
+titleText.y = 20;
+// Instruction text
+var instructionText = new Text2('Tap the gong or Mr. Beaky to make noise!', {
+	size: 60,
+	fill: 0xFFFF00
+});
+instructionText.anchor.set(0.5, 1);
+LK.gui.bottom.addChild(instructionText);
+instructionText.x = LK.gui.bottom.width / 2;
+instructionText.y = -50;
+// Game update loop
+game.update = function () {
+	// Update noise meter visual
+	var fillWidth = Math.max(10, noiseLevel / maxNoiseLevel * 290);
+	noiseMeterFill.width = fillWidth;
+	// Update noise meter color based on level
+	if (noiseLevel < 30) {
+		noiseMeterFill.tint = 0x00FF00; // Green
+	} else if (noiseLevel < 70) {
+		noiseMeterFill.tint = 0xFFFF00; // Yellow
+	} else {
+		noiseMeterFill.tint = 0xFF0000; // Red
+	}
+	// Gradually decrease noise level over time
+	if (noiseLevel > 0 && LK.ticks % 30 == 0) {
+		noiseLevel = Math.max(0, noiseLevel - 2);
+	}
+	// Clean up expired tea monsters
+	for (var i = teaMonsters.length - 1; i >= 0; i--) {
+		var monster = teaMonsters[i];
+		if (monster.lifespan >= monster.maxLifespan + 20) {
+			// Extra time for fade out
+			monster.destroy();
+			teaMonsters.splice(i, 1);
+		}
+	}
+};
\ No newline at end of file