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