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