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