Code edit (1 edits merged)
Please save this source code
User prompt
Ginger's Northern Lights Magic
Initial prompt
Toca northern lights (2016). Twitter 🐦 loves ginger 🐱 and she always make some magic. Tap on the wand and then a star to see it glow blue 💙, purple 💜, or green 💚 9 times. And then ginger 🐱 will sing “Mary had a little lamb”
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ var Ginger = Container.expand(function () { var self = Container.call(this); var gingerBody = self.attachAsset('ginger', { anchorX: 0.5, anchorY: 1.0 }); var wand = self.addChild(LK.getAsset('wand', { anchorX: 0.2, anchorY: 0.5 })); var wandTip = wand.addChild(LK.getAsset('wandTip', { anchorX: 0.5, anchorY: 0.5 })); wand.x = 60; wand.y = -120; wand.rotation = -0.3; wandTip.x = 80; self.isPerforming = false; self.activateWand = function () { wandActivated = true; LK.getSound('wandActivate').play(); // Wand glow effect LK.effects.flashObject(wandTip, 0xffd700, 800); // Gentle wand wave animation tween(wand, { rotation: -0.1 }, { duration: 400, easing: tween.easeInOut, onFinish: function onFinish() { tween(wand, { rotation: -0.3 }, { duration: 400 }); } }); wandText.setText("Magic activated! Touch the stars!"); }; self.startPerformance = function () { self.isPerforming = true; // Performance animation - gentle swaying function sway() { if (self.isPerforming) { tween(gingerBody, { rotation: 0.1 }, { duration: 1000, easing: tween.easeInOut, onFinish: function onFinish() { tween(gingerBody, { rotation: -0.1 }, { duration: 1000, easing: tween.easeInOut, onFinish: sway }); } }); } } sway(); // Start singing performance performSong(); }; wand.down = function (x, y, obj) { if (!wandActivated) { self.activateWand(); } }; return self; }); var Star = Container.expand(function () { var self = Container.call(this); var starGraphics = self.attachAsset('star', { anchorX: 0.5, anchorY: 0.5 }); self.isLit = false; self.originalColor = 0xffff99; self.auroraColors = [0x00bfff, 0x9370db, 0x00ff7f]; // Blue, purple, green self.currentColorIndex = 0; self.light = function () { if (!self.isLit) { self.isLit = true; var auroraColor = self.auroraColors[self.currentColorIndex]; starGraphics.tint = auroraColor; // Scale up animation tween(starGraphics, { scaleX: 1.5, scaleY: 1.5 }, { duration: 300, easing: tween.easeOut, onFinish: function onFinish() { tween(starGraphics, { scaleX: 1.2, scaleY: 1.2 }, { duration: 200 }); } }); // Glow effect LK.effects.flashObject(self, auroraColor, 500); LK.getSound('starGlow').play(); // Cycle to next aurora color for next star Star.prototype.nextColorIndex = (Star.prototype.nextColorIndex || 0) + 1; if (Star.prototype.nextColorIndex >= self.auroraColors.length) { Star.prototype.nextColorIndex = 0; } } }; self.down = function (x, y, obj) { if (wandActivated && !self.isLit) { self.currentColorIndex = Star.prototype.nextColorIndex || 0; self.light(); starsLit++; updateProgress(); checkWinCondition(); } }; self.update = function () { if (self.isLit) { // Gentle twinkling effect var twinkle = Math.sin(LK.ticks * 0.1) * 0.1 + 0.9; starGraphics.alpha = twinkle; } }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x000428 // Dark night sky blue }); /**** * Game Code ****/ var wandActivated = false; var starsLit = 0; var stars = []; var ginger; var progressText; var wandText; var performanceText; var isPerforming = false; var songIndex = 0; var songTimer = 0; // Mary Had a Little Lamb lyrics var songLyrics = ["♪ Mary had a little lamb ♪", "♪ Little lamb, little lamb ♪", "♪ Mary had a little lamb ♪", "♪ Its fleece was white as snow ♪"]; // Create Ginger character ginger = game.addChild(new Ginger()); ginger.x = 1024; // Center horizontally ginger.y = 2500; // Near bottom // Create stars scattered across the sky var starPositions = [{ x: 300, y: 400 }, { x: 800, y: 300 }, { x: 1400, y: 450 }, { x: 500, y: 650 }, { x: 1200, y: 600 }, { x: 1700, y: 700 }, { x: 400, y: 900 }, { x: 900, y: 850 }, { x: 1500, y: 950 }]; for (var i = 0; i < starPositions.length; i++) { var star = game.addChild(new Star()); star.x = starPositions[i].x; star.y = starPositions[i].y; stars.push(star); } // UI Elements progressText = new Text2('0/9 Stars Lit', { size: 60, fill: 0xFFFFFF }); progressText.anchor.set(0.5, 0); LK.gui.top.addChild(progressText); progressText.y = 50; wandText = new Text2('Tap Ginger\'s wand to begin!', { size: 50, fill: 0xFFFF99 }); wandText.anchor.set(0.5, 1); LK.gui.bottom.addChild(wandText); wandText.y = -100; performanceText = new Text2('', { size: 70, fill: 0xFF69B4 }); performanceText.anchor.set(0.5, 0.5); LK.gui.center.addChild(performanceText); function updateProgress() { progressText.setText(starsLit + '/9 Stars Lit'); if (starsLit >= 9 && !isPerforming) { wandText.setText('All stars are glowing! 🌟'); } } function checkWinCondition() { if (starsLit >= 9 && !isPerforming) { isPerforming = true; wandText.setText('Ginger is performing for you!'); LK.setTimeout(function () { ginger.startPerformance(); }, 1000); } } function performSong() { if (songIndex < songLyrics.length) { performanceText.setText(songLyrics[songIndex]); performanceText.alpha = 0; // Fade in text tween(performanceText, { alpha: 1 }, { duration: 500, onFinish: function onFinish() { // Keep text visible for 2 seconds LK.setTimeout(function () { // Fade out text tween(performanceText, { alpha: 0 }, { duration: 500, onFinish: function onFinish() { songIndex++; if (songIndex < songLyrics.length) { LK.setTimeout(function () { performSong(); }, 500); } else { // Song finished, reset game LK.setTimeout(function () { resetGame(); }, 2000); } } }); }, 2000); } }); // Create aurora effect during performance createAuroraEffect(); } } function createAuroraEffect() { // Flash screen with gentle aurora colors var auroraColors = [0x00bfff, 0x9370db, 0x00ff7f]; var color = auroraColors[Math.floor(Math.random() * auroraColors.length)]; LK.effects.flashScreen(color, 1500); } function resetGame() { // Reset all game state wandActivated = false; starsLit = 0; isPerforming = false; songIndex = 0; ginger.isPerforming = false; // Reset all stars for (var i = 0; i < stars.length; i++) { stars[i].isLit = false; var starGraphics = stars[i].children[0]; starGraphics.tint = 0xffff99; starGraphics.alpha = 1; starGraphics.scaleX = 1; starGraphics.scaleY = 1; } // Reset UI updateProgress(); wandText.setText('Tap Ginger\'s wand to begin!'); performanceText.setText(''); // Reset color cycling Star.prototype.nextColorIndex = 0; } game.update = function () { // Aurora background effects when wand is activated if (wandActivated && !isPerforming && LK.ticks % 180 == 0) { var auroraColors = [0x001a4d, 0x1a0033, 0x003d1a]; var color = auroraColors[Math.floor(Math.random() * auroraColors.length)]; LK.effects.flashScreen(color, 2000); } };
===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,313 @@
-/****
+/****
+* Plugins
+****/
+var tween = LK.import("@upit/tween.v1");
+
+/****
+* Classes
+****/
+var Ginger = Container.expand(function () {
+ var self = Container.call(this);
+ var gingerBody = self.attachAsset('ginger', {
+ anchorX: 0.5,
+ anchorY: 1.0
+ });
+ var wand = self.addChild(LK.getAsset('wand', {
+ anchorX: 0.2,
+ anchorY: 0.5
+ }));
+ var wandTip = wand.addChild(LK.getAsset('wandTip', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ }));
+ wand.x = 60;
+ wand.y = -120;
+ wand.rotation = -0.3;
+ wandTip.x = 80;
+ self.isPerforming = false;
+ self.activateWand = function () {
+ wandActivated = true;
+ LK.getSound('wandActivate').play();
+ // Wand glow effect
+ LK.effects.flashObject(wandTip, 0xffd700, 800);
+ // Gentle wand wave animation
+ tween(wand, {
+ rotation: -0.1
+ }, {
+ duration: 400,
+ easing: tween.easeInOut,
+ onFinish: function onFinish() {
+ tween(wand, {
+ rotation: -0.3
+ }, {
+ duration: 400
+ });
+ }
+ });
+ wandText.setText("Magic activated! Touch the stars!");
+ };
+ self.startPerformance = function () {
+ self.isPerforming = true;
+ // Performance animation - gentle swaying
+ function sway() {
+ if (self.isPerforming) {
+ tween(gingerBody, {
+ rotation: 0.1
+ }, {
+ duration: 1000,
+ easing: tween.easeInOut,
+ onFinish: function onFinish() {
+ tween(gingerBody, {
+ rotation: -0.1
+ }, {
+ duration: 1000,
+ easing: tween.easeInOut,
+ onFinish: sway
+ });
+ }
+ });
+ }
+ }
+ sway();
+ // Start singing performance
+ performSong();
+ };
+ wand.down = function (x, y, obj) {
+ if (!wandActivated) {
+ self.activateWand();
+ }
+ };
+ return self;
+});
+var Star = Container.expand(function () {
+ var self = Container.call(this);
+ var starGraphics = self.attachAsset('star', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.isLit = false;
+ self.originalColor = 0xffff99;
+ self.auroraColors = [0x00bfff, 0x9370db, 0x00ff7f]; // Blue, purple, green
+ self.currentColorIndex = 0;
+ self.light = function () {
+ if (!self.isLit) {
+ self.isLit = true;
+ var auroraColor = self.auroraColors[self.currentColorIndex];
+ starGraphics.tint = auroraColor;
+ // Scale up animation
+ tween(starGraphics, {
+ scaleX: 1.5,
+ scaleY: 1.5
+ }, {
+ duration: 300,
+ easing: tween.easeOut,
+ onFinish: function onFinish() {
+ tween(starGraphics, {
+ scaleX: 1.2,
+ scaleY: 1.2
+ }, {
+ duration: 200
+ });
+ }
+ });
+ // Glow effect
+ LK.effects.flashObject(self, auroraColor, 500);
+ LK.getSound('starGlow').play();
+ // Cycle to next aurora color for next star
+ Star.prototype.nextColorIndex = (Star.prototype.nextColorIndex || 0) + 1;
+ if (Star.prototype.nextColorIndex >= self.auroraColors.length) {
+ Star.prototype.nextColorIndex = 0;
+ }
+ }
+ };
+ self.down = function (x, y, obj) {
+ if (wandActivated && !self.isLit) {
+ self.currentColorIndex = Star.prototype.nextColorIndex || 0;
+ self.light();
+ starsLit++;
+ updateProgress();
+ checkWinCondition();
+ }
+ };
+ self.update = function () {
+ if (self.isLit) {
+ // Gentle twinkling effect
+ var twinkle = Math.sin(LK.ticks * 0.1) * 0.1 + 0.9;
+ starGraphics.alpha = twinkle;
+ }
+ };
+ return self;
+});
+
+/****
* Initialize Game
-****/
+****/
var game = new LK.Game({
- backgroundColor: 0x000000
-});
\ No newline at end of file
+ backgroundColor: 0x000428 // Dark night sky blue
+});
+
+/****
+* Game Code
+****/
+var wandActivated = false;
+var starsLit = 0;
+var stars = [];
+var ginger;
+var progressText;
+var wandText;
+var performanceText;
+var isPerforming = false;
+var songIndex = 0;
+var songTimer = 0;
+// Mary Had a Little Lamb lyrics
+var songLyrics = ["♪ Mary had a little lamb ♪", "♪ Little lamb, little lamb ♪", "♪ Mary had a little lamb ♪", "♪ Its fleece was white as snow ♪"];
+// Create Ginger character
+ginger = game.addChild(new Ginger());
+ginger.x = 1024; // Center horizontally
+ginger.y = 2500; // Near bottom
+// Create stars scattered across the sky
+var starPositions = [{
+ x: 300,
+ y: 400
+}, {
+ x: 800,
+ y: 300
+}, {
+ x: 1400,
+ y: 450
+}, {
+ x: 500,
+ y: 650
+}, {
+ x: 1200,
+ y: 600
+}, {
+ x: 1700,
+ y: 700
+}, {
+ x: 400,
+ y: 900
+}, {
+ x: 900,
+ y: 850
+}, {
+ x: 1500,
+ y: 950
+}];
+for (var i = 0; i < starPositions.length; i++) {
+ var star = game.addChild(new Star());
+ star.x = starPositions[i].x;
+ star.y = starPositions[i].y;
+ stars.push(star);
+}
+// UI Elements
+progressText = new Text2('0/9 Stars Lit', {
+ size: 60,
+ fill: 0xFFFFFF
+});
+progressText.anchor.set(0.5, 0);
+LK.gui.top.addChild(progressText);
+progressText.y = 50;
+wandText = new Text2('Tap Ginger\'s wand to begin!', {
+ size: 50,
+ fill: 0xFFFF99
+});
+wandText.anchor.set(0.5, 1);
+LK.gui.bottom.addChild(wandText);
+wandText.y = -100;
+performanceText = new Text2('', {
+ size: 70,
+ fill: 0xFF69B4
+});
+performanceText.anchor.set(0.5, 0.5);
+LK.gui.center.addChild(performanceText);
+function updateProgress() {
+ progressText.setText(starsLit + '/9 Stars Lit');
+ if (starsLit >= 9 && !isPerforming) {
+ wandText.setText('All stars are glowing! 🌟');
+ }
+}
+function checkWinCondition() {
+ if (starsLit >= 9 && !isPerforming) {
+ isPerforming = true;
+ wandText.setText('Ginger is performing for you!');
+ LK.setTimeout(function () {
+ ginger.startPerformance();
+ }, 1000);
+ }
+}
+function performSong() {
+ if (songIndex < songLyrics.length) {
+ performanceText.setText(songLyrics[songIndex]);
+ performanceText.alpha = 0;
+ // Fade in text
+ tween(performanceText, {
+ alpha: 1
+ }, {
+ duration: 500,
+ onFinish: function onFinish() {
+ // Keep text visible for 2 seconds
+ LK.setTimeout(function () {
+ // Fade out text
+ tween(performanceText, {
+ alpha: 0
+ }, {
+ duration: 500,
+ onFinish: function onFinish() {
+ songIndex++;
+ if (songIndex < songLyrics.length) {
+ LK.setTimeout(function () {
+ performSong();
+ }, 500);
+ } else {
+ // Song finished, reset game
+ LK.setTimeout(function () {
+ resetGame();
+ }, 2000);
+ }
+ }
+ });
+ }, 2000);
+ }
+ });
+ // Create aurora effect during performance
+ createAuroraEffect();
+ }
+}
+function createAuroraEffect() {
+ // Flash screen with gentle aurora colors
+ var auroraColors = [0x00bfff, 0x9370db, 0x00ff7f];
+ var color = auroraColors[Math.floor(Math.random() * auroraColors.length)];
+ LK.effects.flashScreen(color, 1500);
+}
+function resetGame() {
+ // Reset all game state
+ wandActivated = false;
+ starsLit = 0;
+ isPerforming = false;
+ songIndex = 0;
+ ginger.isPerforming = false;
+ // Reset all stars
+ for (var i = 0; i < stars.length; i++) {
+ stars[i].isLit = false;
+ var starGraphics = stars[i].children[0];
+ starGraphics.tint = 0xffff99;
+ starGraphics.alpha = 1;
+ starGraphics.scaleX = 1;
+ starGraphics.scaleY = 1;
+ }
+ // Reset UI
+ updateProgress();
+ wandText.setText('Tap Ginger\'s wand to begin!');
+ performanceText.setText('');
+ // Reset color cycling
+ Star.prototype.nextColorIndex = 0;
+}
+game.update = function () {
+ // Aurora background effects when wand is activated
+ if (wandActivated && !isPerforming && LK.ticks % 180 == 0) {
+ var auroraColors = [0x001a4d, 0x1a0033, 0x003d1a];
+ var color = auroraColors[Math.floor(Math.random() * auroraColors.length)];
+ LK.effects.flashScreen(color, 2000);
+ }
+};
\ No newline at end of file