/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ var Character = Container.expand(function (assetId, startX, startY) { var self = Container.call(this); var sprite = self.attachAsset(assetId, { anchorX: 0.5, anchorY: 1 }); self.x = startX; self.y = startY; self.alpha = 0; self.appear = function () { tween(self, { alpha: 1 }, { duration: 800, easing: tween.easeOut }); }; self.hide = function () { tween(self, { alpha: 0 }, { duration: 300 }); }; return self; }); var Firework = Container.expand(function (startX, startY) { var self = Container.call(this); var firework = self.attachAsset('firework', { anchorX: 0.5, anchorY: 0.5 }); self.x = startX; self.y = startY; self.alpha = 0; self.explode = function () { tween(self, { alpha: 1, scaleX: 3, scaleY: 3 }, { duration: 500, easing: tween.easeOut, onFinish: function onFinish() { tween(self, { alpha: 0 }, { duration: 800 }); } }); }; return self; }); var TVSet = Container.expand(function () { var self = Container.call(this); var frame = self.attachAsset('tvFrame', { anchorX: 0.5, anchorY: 0.5 }); var screen = self.attachAsset('tvScreen', { anchorX: 0.5, anchorY: 0.5 }); var garden = self.attachAsset('gardenBg', { anchorX: 0.5, anchorY: 0.5 }); garden.alpha = 0; var playBtn = self.attachAsset('playButton', { anchorX: 0.5, anchorY: 0.5 }); var playIcon = self.attachAsset('playTriangle', { anchorX: 0.5, anchorY: 0.5, x: 10 }); self.showGarden = function () { garden.alpha = 1; playBtn.alpha = 0; playIcon.alpha = 0; }; self.showPlayButton = function () { garden.alpha = 0; playBtn.alpha = 1; playIcon.alpha = 1; }; self.down = function (x, y, obj) { if (playBtn.alpha > 0) { LK.getSound('click').play(); game.nextScene(); } }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x2F1B69 }); /**** * Game Code ****/ var currentScene = 0; var maxScenes = 8; var sceneTimer = null; var fireworksActive = false; var characters = []; var fireworks = []; var sceneTexts = ["Welcome to Bing's Fireworks Adventure!", "Bing and Flop arrive in the garden...", "Coco brings baby Charlie to join them!", "Sula and Amma come to watch too!", "Pando and Padget are excited for fireworks!", "The Pig family arrives just in time!", "The fireworks begin! So beautiful!", "Bing gets scared, but friends comfort him."]; // Create TV set var tvSet = game.addChild(new TVSet()); tvSet.x = 1024; tvSet.y = 1366; // Create scene text var sceneText = new Text2(sceneTexts[0], { size: 60, fill: 0xFFFFFF }); sceneText.anchor.set(0.5, 0); LK.gui.top.addChild(sceneText); sceneText.y = 100; // Create play instruction var instructionText = new Text2("Tap the TV to continue the story!", { size: 50, fill: 0xFFD700 }); instructionText.anchor.set(0.5, 1); LK.gui.bottom.addChild(instructionText); instructionText.y = -100; function createCharacters() { characters = []; // Scene 1: Bing and Flop if (currentScene >= 1) { var bing = new Character('bing', 400, 800); var flop = new Character('flop', 550, 800); characters.push(bing, flop); } // Scene 2: Coco and Charlie if (currentScene >= 2) { var coco = new Character('coco', 700, 800); var charlie = new Character('charlie', 820, 800); characters.push(coco, charlie); } // Scene 3: Sula and Amma if (currentScene >= 3) { var sula = new Character('sula', 250, 800); var amma = new Character('amma', 130, 800); characters.push(sula, amma); } // Scene 4: Pando and Padget if (currentScene >= 4) { var pando = new Character('pando', 950, 800); var padget = new Character('padget', 1100, 800); characters.push(pando, padget); } // Scene 5: Pig family if (currentScene >= 5) { var pigMama = new Character('pigMama', 1250, 800); var pigPapa = new Character('pigPapa', 1400, 800); var pigBaby = new Character('pigBaby', 1320, 750); characters.push(pigMama, pigPapa, pigBaby); } // Add all characters to game for (var i = 0; i < characters.length; i++) { game.addChild(characters[i]); } } function createFireworks() { fireworks = []; for (var i = 0; i < 8; i++) { var fw = new Firework(300 + i * 150, 200 + Math.random() * 300); fireworks.push(fw); game.addChild(fw); } } function showScene() { // Update scene text sceneText.setText(sceneTexts[currentScene]); if (currentScene === 0) { // Show play button tvSet.showPlayButton(); return; } // Show garden background tvSet.showGarden(); // Clear existing characters for (var i = 0; i < characters.length; i++) { characters[i].destroy(); } // Create and show characters for current scene createCharacters(); // Animate characters appearing LK.setTimeout(function () { for (var i = 0; i < characters.length; i++) { characters[i].appear(); } }, 500); // Handle special scenes if (currentScene === 6) { // Start fireworks createFireworks(); fireworksActive = true; LK.setTimeout(function () { for (var i = 0; i < fireworks.length; i++) { LK.setTimeout(function (fw) { return function () { fw.explode(); LK.getSound('fireworkBoom').play(); }; }(fireworks[i]), i * 300); } }, 1000); } if (currentScene === 7) { // Bing gets scared - make him shake LK.setTimeout(function () { if (characters.length > 0) { var bing = characters[0]; for (var i = 0; i < 10; i++) { LK.setTimeout(function () { bing.x += Math.random() * 10 - 5; }, i * 100); } } }, 1000); } // Auto-advance after scene 6 and 7 if (currentScene >= 6) { LK.setTimeout(function () { if (currentScene < maxScenes - 1) { currentScene++; showScene(); } else { // End of story instructionText.setText("The End! Tap to restart the story."); tvSet.showPlayButton(); } }, 4000); } else { // Show play button for next scene LK.setTimeout(function () { tvSet.showPlayButton(); }, 2000); } } game.nextScene = function () { if (currentScene >= maxScenes - 1) { // Restart story currentScene = 0; fireworksActive = false; // Clear fireworks for (var i = 0; i < fireworks.length; i++) { fireworks[i].destroy(); } fireworks = []; // Clear characters for (var i = 0; i < characters.length; i++) { characters[i].destroy(); } characters = []; instructionText.setText("Tap the TV to continue the story!"); showScene(); } else { currentScene++; showScene(); } }; game.update = function () { // Handle fireworks animation if (fireworksActive) { if (LK.ticks % 60 === 0) { // Add sparkle stars for (var i = 0; i < 5; i++) { var star = LK.getAsset('star', { anchorX: 0.5, anchorY: 0.5, x: 200 + Math.random() * 1000, y: 100 + Math.random() * 400 }); game.addChild(star); tween(star, { alpha: 0, scaleX: 0.1, scaleY: 0.1 }, { duration: 1000, onFinish: function onFinish() { star.destroy(); } }); } } } }; // Start the story showScene();
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var Character = Container.expand(function (assetId, startX, startY) {
var self = Container.call(this);
var sprite = self.attachAsset(assetId, {
anchorX: 0.5,
anchorY: 1
});
self.x = startX;
self.y = startY;
self.alpha = 0;
self.appear = function () {
tween(self, {
alpha: 1
}, {
duration: 800,
easing: tween.easeOut
});
};
self.hide = function () {
tween(self, {
alpha: 0
}, {
duration: 300
});
};
return self;
});
var Firework = Container.expand(function (startX, startY) {
var self = Container.call(this);
var firework = self.attachAsset('firework', {
anchorX: 0.5,
anchorY: 0.5
});
self.x = startX;
self.y = startY;
self.alpha = 0;
self.explode = function () {
tween(self, {
alpha: 1,
scaleX: 3,
scaleY: 3
}, {
duration: 500,
easing: tween.easeOut,
onFinish: function onFinish() {
tween(self, {
alpha: 0
}, {
duration: 800
});
}
});
};
return self;
});
var TVSet = Container.expand(function () {
var self = Container.call(this);
var frame = self.attachAsset('tvFrame', {
anchorX: 0.5,
anchorY: 0.5
});
var screen = self.attachAsset('tvScreen', {
anchorX: 0.5,
anchorY: 0.5
});
var garden = self.attachAsset('gardenBg', {
anchorX: 0.5,
anchorY: 0.5
});
garden.alpha = 0;
var playBtn = self.attachAsset('playButton', {
anchorX: 0.5,
anchorY: 0.5
});
var playIcon = self.attachAsset('playTriangle', {
anchorX: 0.5,
anchorY: 0.5,
x: 10
});
self.showGarden = function () {
garden.alpha = 1;
playBtn.alpha = 0;
playIcon.alpha = 0;
};
self.showPlayButton = function () {
garden.alpha = 0;
playBtn.alpha = 1;
playIcon.alpha = 1;
};
self.down = function (x, y, obj) {
if (playBtn.alpha > 0) {
LK.getSound('click').play();
game.nextScene();
}
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x2F1B69
});
/****
* Game Code
****/
var currentScene = 0;
var maxScenes = 8;
var sceneTimer = null;
var fireworksActive = false;
var characters = [];
var fireworks = [];
var sceneTexts = ["Welcome to Bing's Fireworks Adventure!", "Bing and Flop arrive in the garden...", "Coco brings baby Charlie to join them!", "Sula and Amma come to watch too!", "Pando and Padget are excited for fireworks!", "The Pig family arrives just in time!", "The fireworks begin! So beautiful!", "Bing gets scared, but friends comfort him."];
// Create TV set
var tvSet = game.addChild(new TVSet());
tvSet.x = 1024;
tvSet.y = 1366;
// Create scene text
var sceneText = new Text2(sceneTexts[0], {
size: 60,
fill: 0xFFFFFF
});
sceneText.anchor.set(0.5, 0);
LK.gui.top.addChild(sceneText);
sceneText.y = 100;
// Create play instruction
var instructionText = new Text2("Tap the TV to continue the story!", {
size: 50,
fill: 0xFFD700
});
instructionText.anchor.set(0.5, 1);
LK.gui.bottom.addChild(instructionText);
instructionText.y = -100;
function createCharacters() {
characters = [];
// Scene 1: Bing and Flop
if (currentScene >= 1) {
var bing = new Character('bing', 400, 800);
var flop = new Character('flop', 550, 800);
characters.push(bing, flop);
}
// Scene 2: Coco and Charlie
if (currentScene >= 2) {
var coco = new Character('coco', 700, 800);
var charlie = new Character('charlie', 820, 800);
characters.push(coco, charlie);
}
// Scene 3: Sula and Amma
if (currentScene >= 3) {
var sula = new Character('sula', 250, 800);
var amma = new Character('amma', 130, 800);
characters.push(sula, amma);
}
// Scene 4: Pando and Padget
if (currentScene >= 4) {
var pando = new Character('pando', 950, 800);
var padget = new Character('padget', 1100, 800);
characters.push(pando, padget);
}
// Scene 5: Pig family
if (currentScene >= 5) {
var pigMama = new Character('pigMama', 1250, 800);
var pigPapa = new Character('pigPapa', 1400, 800);
var pigBaby = new Character('pigBaby', 1320, 750);
characters.push(pigMama, pigPapa, pigBaby);
}
// Add all characters to game
for (var i = 0; i < characters.length; i++) {
game.addChild(characters[i]);
}
}
function createFireworks() {
fireworks = [];
for (var i = 0; i < 8; i++) {
var fw = new Firework(300 + i * 150, 200 + Math.random() * 300);
fireworks.push(fw);
game.addChild(fw);
}
}
function showScene() {
// Update scene text
sceneText.setText(sceneTexts[currentScene]);
if (currentScene === 0) {
// Show play button
tvSet.showPlayButton();
return;
}
// Show garden background
tvSet.showGarden();
// Clear existing characters
for (var i = 0; i < characters.length; i++) {
characters[i].destroy();
}
// Create and show characters for current scene
createCharacters();
// Animate characters appearing
LK.setTimeout(function () {
for (var i = 0; i < characters.length; i++) {
characters[i].appear();
}
}, 500);
// Handle special scenes
if (currentScene === 6) {
// Start fireworks
createFireworks();
fireworksActive = true;
LK.setTimeout(function () {
for (var i = 0; i < fireworks.length; i++) {
LK.setTimeout(function (fw) {
return function () {
fw.explode();
LK.getSound('fireworkBoom').play();
};
}(fireworks[i]), i * 300);
}
}, 1000);
}
if (currentScene === 7) {
// Bing gets scared - make him shake
LK.setTimeout(function () {
if (characters.length > 0) {
var bing = characters[0];
for (var i = 0; i < 10; i++) {
LK.setTimeout(function () {
bing.x += Math.random() * 10 - 5;
}, i * 100);
}
}
}, 1000);
}
// Auto-advance after scene 6 and 7
if (currentScene >= 6) {
LK.setTimeout(function () {
if (currentScene < maxScenes - 1) {
currentScene++;
showScene();
} else {
// End of story
instructionText.setText("The End! Tap to restart the story.");
tvSet.showPlayButton();
}
}, 4000);
} else {
// Show play button for next scene
LK.setTimeout(function () {
tvSet.showPlayButton();
}, 2000);
}
}
game.nextScene = function () {
if (currentScene >= maxScenes - 1) {
// Restart story
currentScene = 0;
fireworksActive = false;
// Clear fireworks
for (var i = 0; i < fireworks.length; i++) {
fireworks[i].destroy();
}
fireworks = [];
// Clear characters
for (var i = 0; i < characters.length; i++) {
characters[i].destroy();
}
characters = [];
instructionText.setText("Tap the TV to continue the story!");
showScene();
} else {
currentScene++;
showScene();
}
};
game.update = function () {
// Handle fireworks animation
if (fireworksActive) {
if (LK.ticks % 60 === 0) {
// Add sparkle stars
for (var i = 0; i < 5; i++) {
var star = LK.getAsset('star', {
anchorX: 0.5,
anchorY: 0.5,
x: 200 + Math.random() * 1000,
y: 100 + Math.random() * 400
});
game.addChild(star);
tween(star, {
alpha: 0,
scaleX: 0.1,
scaleY: 0.1
}, {
duration: 1000,
onFinish: function onFinish() {
star.destroy();
}
});
}
}
}
};
// Start the story
showScene();