Code edit (1 edits merged)
Please save this source code
User prompt
Cold vs Hot: Powerpuff Rescue
Initial prompt
Toca cold vs hot (2016). It’s a black hole 🕳️ full of snowfall and the powerpuff girls are too cold and shivering. Tap on them to make them talk, tap on the black hole full of snowfall into the black hole 🕳️ of fire 🔥.
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ var BlackHole = Container.expand(function (holeType) { var self = Container.call(this); var holeGraphics = self.attachAsset(holeType + 'BlackHole', { anchorX: 0.5, anchorY: 0.5 }); self.holeType = holeType; self.particles = []; self.update = function () { // Create particles if (LK.ticks % 20 === 0) { self.createParticle(); } // Update particles for (var i = self.particles.length - 1; i >= 0; i--) { var particle = self.particles[i]; particle.y += particle.speed; particle.alpha -= 0.02; if (particle.alpha <= 0 || particle.y > self.y + 200) { particle.destroy(); self.particles.splice(i, 1); } } }; self.createParticle = function () { var particleType = self.holeType === 'cold' ? 'snowflake' : 'flame'; var particle = LK.getAsset(particleType, { anchorX: 0.5, anchorY: 0.5 }); particle.x = self.x + (Math.random() - 0.5) * 300; particle.y = self.y - 200; particle.speed = self.holeType === 'cold' ? 2 : 3; particle.alpha = 1; if (self.holeType === 'hot') { particle.scaleY = Math.random() * 0.5 + 0.5; } self.particles.push(particle); self.addChild(particle); }; return self; }); var PowerpuffGirl = Container.expand(function (girlType) { var self = Container.call(this); var girlGraphics = self.attachAsset(girlType + 'Girl', { anchorX: 0.5, anchorY: 0.5 }); self.girlType = girlType; self.rescued = false; self.shivering = true; self.down = function (x, y, obj) { if (!self.rescued) { LK.getSound('girlTap').play(); self.speak(); } }; self.speak = function () { // Flash girl to show she's speaking LK.effects.flashObject(self, 0xffffff, 300); // Shiver animation if (self.shivering) { tween(self, { x: self.x + 5 }, { duration: 100, onFinish: function onFinish() { tween(self, { x: self.x - 10 }, { duration: 100, onFinish: function onFinish() { tween(self, { x: self.x + 5 }, { duration: 100 }); } }); } }); } }; self.stopShivering = function () { self.shivering = false; self.rescued = true; // Happy bounce animation tween(self, { scaleX: 1.2, scaleY: 1.2 }, { duration: 200, onFinish: function onFinish() { tween(self, { scaleX: 1, scaleY: 1 }, { duration: 200 }); } }); }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x2c3e50 }); /**** * Game Code ****/ var coldHole = game.addChild(new BlackHole('cold')); coldHole.x = 500; coldHole.y = 1000; var hotHole = game.addChild(new BlackHole('hot')); hotHole.x = 1500; hotHole.y = 2000; var girls = []; var blossom = new PowerpuffGirl('blossom'); var bubbles = new PowerpuffGirl('bubbles'); var buttercup = new PowerpuffGirl('buttercup'); girls.push(blossom, bubbles, buttercup); // Position girls in cold hole blossom.x = coldHole.x - 80; blossom.y = coldHole.y; bubbles.x = coldHole.x; bubbles.y = coldHole.y - 60; buttercup.x = coldHole.x + 80; buttercup.y = coldHole.y; coldHole.addChild(blossom); coldHole.addChild(bubbles); coldHole.addChild(buttercup); var dragNode = null; var dragOffset = { x: 0, y: 0 }; function handleMove(x, y, obj) { if (dragNode) { dragNode.x = x - dragOffset.x; dragNode.y = y - dragOffset.y; // Keep within bounds dragNode.x = Math.max(200, Math.min(1848, dragNode.x)); dragNode.y = Math.max(200, Math.min(2532, dragNode.y)); } } game.move = handleMove; game.down = function (x, y, obj) { if (coldHole.x - 200 < x && x < coldHole.x + 200 && coldHole.y - 200 < y && y < coldHole.y + 200) { dragNode = coldHole; dragOffset.x = x - coldHole.x; dragOffset.y = y - coldHole.y; } }; game.up = function (x, y, obj) { if (dragNode === coldHole) { // Check if close enough to hot hole var distance = Math.sqrt(Math.pow(coldHole.x - hotHole.x, 2) + Math.pow(coldHole.y - hotHole.y, 2)); if (distance < 300) { // Merge holes - rescue girls rescueGirls(); } } dragNode = null; }; function rescueGirls() { LK.getSound('rescue').play(); // Move girls to hot hole for (var i = 0; i < girls.length; i++) { var girl = girls[i]; girl.stopShivering(); // Remove from cold hole and add to hot hole coldHole.removeChild(girl); hotHole.addChild(girl); // Position in hot hole girl.x = (i - 1) * 80; girl.y = -50; } // Move cold hole to hot hole position tween(coldHole, { x: hotHole.x, y: hotHole.y, alpha: 0 }, { duration: 1000, onFinish: function onFinish() { coldHole.destroy(); // Show win after short delay LK.setTimeout(function () { LK.showYouWin(); }, 1500); } }); } game.update = function () { // Check if all girls are rescued var allRescued = true; for (var i = 0; i < girls.length; i++) { if (!girls[i].rescued) { allRescued = false; break; } } if (allRescued && LK.ticks > 180) {// Give some time before checking // Already handled in rescueGirls function } };
===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,219 @@
-/****
+/****
+* Plugins
+****/
+var tween = LK.import("@upit/tween.v1");
+
+/****
+* Classes
+****/
+var BlackHole = Container.expand(function (holeType) {
+ var self = Container.call(this);
+ var holeGraphics = self.attachAsset(holeType + 'BlackHole', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.holeType = holeType;
+ self.particles = [];
+ self.update = function () {
+ // Create particles
+ if (LK.ticks % 20 === 0) {
+ self.createParticle();
+ }
+ // Update particles
+ for (var i = self.particles.length - 1; i >= 0; i--) {
+ var particle = self.particles[i];
+ particle.y += particle.speed;
+ particle.alpha -= 0.02;
+ if (particle.alpha <= 0 || particle.y > self.y + 200) {
+ particle.destroy();
+ self.particles.splice(i, 1);
+ }
+ }
+ };
+ self.createParticle = function () {
+ var particleType = self.holeType === 'cold' ? 'snowflake' : 'flame';
+ var particle = LK.getAsset(particleType, {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ particle.x = self.x + (Math.random() - 0.5) * 300;
+ particle.y = self.y - 200;
+ particle.speed = self.holeType === 'cold' ? 2 : 3;
+ particle.alpha = 1;
+ if (self.holeType === 'hot') {
+ particle.scaleY = Math.random() * 0.5 + 0.5;
+ }
+ self.particles.push(particle);
+ self.addChild(particle);
+ };
+ return self;
+});
+var PowerpuffGirl = Container.expand(function (girlType) {
+ var self = Container.call(this);
+ var girlGraphics = self.attachAsset(girlType + 'Girl', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.girlType = girlType;
+ self.rescued = false;
+ self.shivering = true;
+ self.down = function (x, y, obj) {
+ if (!self.rescued) {
+ LK.getSound('girlTap').play();
+ self.speak();
+ }
+ };
+ self.speak = function () {
+ // Flash girl to show she's speaking
+ LK.effects.flashObject(self, 0xffffff, 300);
+ // Shiver animation
+ if (self.shivering) {
+ tween(self, {
+ x: self.x + 5
+ }, {
+ duration: 100,
+ onFinish: function onFinish() {
+ tween(self, {
+ x: self.x - 10
+ }, {
+ duration: 100,
+ onFinish: function onFinish() {
+ tween(self, {
+ x: self.x + 5
+ }, {
+ duration: 100
+ });
+ }
+ });
+ }
+ });
+ }
+ };
+ self.stopShivering = function () {
+ self.shivering = false;
+ self.rescued = true;
+ // Happy bounce animation
+ tween(self, {
+ scaleX: 1.2,
+ scaleY: 1.2
+ }, {
+ duration: 200,
+ onFinish: function onFinish() {
+ tween(self, {
+ scaleX: 1,
+ scaleY: 1
+ }, {
+ duration: 200
+ });
+ }
+ });
+ };
+ return self;
+});
+
+/****
* Initialize Game
-****/
+****/
var game = new LK.Game({
- backgroundColor: 0x000000
-});
\ No newline at end of file
+ backgroundColor: 0x2c3e50
+});
+
+/****
+* Game Code
+****/
+var coldHole = game.addChild(new BlackHole('cold'));
+coldHole.x = 500;
+coldHole.y = 1000;
+var hotHole = game.addChild(new BlackHole('hot'));
+hotHole.x = 1500;
+hotHole.y = 2000;
+var girls = [];
+var blossom = new PowerpuffGirl('blossom');
+var bubbles = new PowerpuffGirl('bubbles');
+var buttercup = new PowerpuffGirl('buttercup');
+girls.push(blossom, bubbles, buttercup);
+// Position girls in cold hole
+blossom.x = coldHole.x - 80;
+blossom.y = coldHole.y;
+bubbles.x = coldHole.x;
+bubbles.y = coldHole.y - 60;
+buttercup.x = coldHole.x + 80;
+buttercup.y = coldHole.y;
+coldHole.addChild(blossom);
+coldHole.addChild(bubbles);
+coldHole.addChild(buttercup);
+var dragNode = null;
+var dragOffset = {
+ x: 0,
+ y: 0
+};
+function handleMove(x, y, obj) {
+ if (dragNode) {
+ dragNode.x = x - dragOffset.x;
+ dragNode.y = y - dragOffset.y;
+ // Keep within bounds
+ dragNode.x = Math.max(200, Math.min(1848, dragNode.x));
+ dragNode.y = Math.max(200, Math.min(2532, dragNode.y));
+ }
+}
+game.move = handleMove;
+game.down = function (x, y, obj) {
+ if (coldHole.x - 200 < x && x < coldHole.x + 200 && coldHole.y - 200 < y && y < coldHole.y + 200) {
+ dragNode = coldHole;
+ dragOffset.x = x - coldHole.x;
+ dragOffset.y = y - coldHole.y;
+ }
+};
+game.up = function (x, y, obj) {
+ if (dragNode === coldHole) {
+ // Check if close enough to hot hole
+ var distance = Math.sqrt(Math.pow(coldHole.x - hotHole.x, 2) + Math.pow(coldHole.y - hotHole.y, 2));
+ if (distance < 300) {
+ // Merge holes - rescue girls
+ rescueGirls();
+ }
+ }
+ dragNode = null;
+};
+function rescueGirls() {
+ LK.getSound('rescue').play();
+ // Move girls to hot hole
+ for (var i = 0; i < girls.length; i++) {
+ var girl = girls[i];
+ girl.stopShivering();
+ // Remove from cold hole and add to hot hole
+ coldHole.removeChild(girl);
+ hotHole.addChild(girl);
+ // Position in hot hole
+ girl.x = (i - 1) * 80;
+ girl.y = -50;
+ }
+ // Move cold hole to hot hole position
+ tween(coldHole, {
+ x: hotHole.x,
+ y: hotHole.y,
+ alpha: 0
+ }, {
+ duration: 1000,
+ onFinish: function onFinish() {
+ coldHole.destroy();
+ // Show win after short delay
+ LK.setTimeout(function () {
+ LK.showYouWin();
+ }, 1500);
+ }
+ });
+}
+game.update = function () {
+ // Check if all girls are rescued
+ var allRescued = true;
+ for (var i = 0; i < girls.length; i++) {
+ if (!girls[i].rescued) {
+ allRescued = false;
+ break;
+ }
+ }
+ if (allRescued && LK.ticks > 180) {// Give some time before checking
+ // Already handled in rescueGirls function
+ }
+};
\ No newline at end of file