/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ var Puppet = Container.expand(function (assetId, startX, startY) { var self = Container.call(this); var puppetGraphics = self.attachAsset(assetId, { anchorX: 0.5, anchorY: 1.0 }); self.x = startX; self.y = startY; self.alpha = 0; self.scaleX = 0.8; self.scaleY = 0.8; self.appear = function () { tween(self, { alpha: 1, scaleX: 1, scaleY: 1 }, { duration: 800, easing: tween.easeOut }); }; self.bobAnimation = function () { tween(self, { y: self.y - 30 }, { duration: 1000, easing: tween.easeInOut, onFinish: function onFinish() { tween(self, { y: self.y + 30 }, { duration: 1000, easing: tween.easeInOut, onFinish: function onFinish() { if (self.parent) { self.bobAnimation(); } } }); } }); }; self.disappear = function () { tween(self, { alpha: 0, scaleX: 0.8, scaleY: 0.8 }, { duration: 500, easing: tween.easeIn }); }; return self; }); var Snowflake = Container.expand(function () { var self = Container.call(this); var snowGraphics = self.attachAsset('snowflake', { anchorX: 0.5, anchorY: 0.5 }); self.x = Math.random() * 2048; self.y = -50; self.speed = 2 + Math.random() * 3; self.sway = Math.random() * 2 - 1; self.update = function () { self.y += self.speed; self.x += self.sway; if (self.y > 2732 + 50) { self.y = -50; self.x = Math.random() * 2048; } }; return self; }); var Sparkle = Container.expand(function () { var self = Container.call(this); var sparkleGraphics = self.attachAsset('sparkle', { anchorX: 0.5, anchorY: 0.5 }); self.x = Math.random() * 2048; self.y = Math.random() * 2732; self.alpha = 0; self.scaleX = 0.5; self.scaleY = 0.5; self.sparkle = function () { tween(self, { alpha: 1, scaleX: 2, scaleY: 2 }, { duration: 500, easing: tween.easeOut, onFinish: function onFinish() { tween(self, { alpha: 0, scaleX: 0.5, scaleY: 0.5 }, { duration: 500, easing: tween.easeIn }); } }); }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x2F1B14 }); /**** * Game Code ****/ var currentScene = 0; var maxScenes = 6; var sceneTimer = 0; var sceneActive = false; var curtainRaised = false; var puppets = []; var snowflakes = []; var sparkles = []; // Create theater stage var stage = game.addChild(LK.getAsset('stage', { anchorX: 0.5, anchorY: 1.0, x: 1024, y: 2200 })); // Create curtain var curtain = game.addChild(LK.getAsset('curtain', { anchorX: 0.5, anchorY: 0.0, x: 1024, y: 900 })); // Create curtain rope var curtainRope = game.addChild(LK.getAsset('curtainRope', { anchorX: 0.5, anchorY: 0.5, x: 1024, y: 880 })); // Create title text var titleText = new Text2('Puppet Show Theater', { size: 120, fill: 0xFFD700 }); titleText.anchor.set(0.5, 0.5); titleText.x = 1024; titleText.y = 400; game.addChild(titleText); // Create tap instruction var tapText = new Text2('Tap the red curtain to begin!', { size: 80, fill: 0xFFFFFF }); tapText.anchor.set(0.5, 0.5); tapText.x = 1024; tapText.y = 600; game.addChild(tapText); // Create scene text var sceneText = new Text2('', { size: 100, fill: 0xFFFFFF }); sceneText.anchor.set(0.5, 0.5); sceneText.x = 1024; sceneText.y = 700; sceneText.alpha = 0; game.addChild(sceneText); function raiseCurtain() { if (!curtainRaised) { curtainRaised = true; LK.getSound('curtainUp').play(); tapText.alpha = 0; tween(curtain, { y: 600 }, { duration: 1500, easing: tween.easeOut, onFinish: function onFinish() { startScene(); } }); tween(curtainRope, { y: 580 }, { duration: 1500, easing: tween.easeOut }); } } function startScene() { sceneActive = true; sceneTimer = 0; // Clear previous puppets for (var i = 0; i < puppets.length; i++) { puppets[i].destroy(); } puppets = []; // Clear previous effects for (var i = 0; i < snowflakes.length; i++) { snowflakes[i].destroy(); } snowflakes = []; for (var i = 0; i < sparkles.length; i++) { sparkles[i].destroy(); } sparkles = []; LK.getSound('sceneChange').play(); switch (currentScene) { case 0: showScene1(); break; case 1: showScene2(); break; case 2: showScene3(); break; case 3: showScene4(); break; case 4: showScene5(); break; case 5: showScene6(); break; } } function showScene1() { sceneText.setText('Cody Fox & Lily Fish'); tween(sceneText, { alpha: 1 }, { duration: 500 }); var codfox = new Puppet('codfox', 800, 1600); var lilyfish = new Puppet('lilyfish', 1200, 1600); puppets.push(codfox); puppets.push(lilyfish); game.addChild(codfox); game.addChild(lilyfish); LK.setTimeout(function () { codfox.appear(); codfox.bobAnimation(); }, 500); LK.setTimeout(function () { lilyfish.appear(); lilyfish.bobAnimation(); }, 1000); } function showScene2() { sceneText.setText('Twilight Sparkle'); tween(sceneText, { alpha: 1 }, { duration: 500 }); var twilight = new Puppet('twilight', 1024, 1600); puppets.push(twilight); game.addChild(twilight); LK.setTimeout(function () { twilight.appear(); twilight.bobAnimation(); }, 500); } function showScene3() { sceneText.setText('PJ Masks Heroes'); tween(sceneText, { alpha: 1 }, { duration: 500 }); var catboy = new Puppet('catboy', 700, 1600); var owlette = new Puppet('owlette', 1024, 1600); var gekko = new Puppet('gekko', 1300, 1600); puppets.push(catboy); puppets.push(owlette); puppets.push(gekko); game.addChild(catboy); game.addChild(owlette); game.addChild(gekko); LK.setTimeout(function () { catboy.appear(); catboy.bobAnimation(); }, 300); LK.setTimeout(function () { owlette.appear(); owlette.bobAnimation(); }, 600); LK.setTimeout(function () { gekko.appear(); gekko.bobAnimation(); }, 900); } function showScene4() { sceneText.setText('Princess Sofia'); tween(sceneText, { alpha: 1 }, { duration: 500 }); var sofia = new Puppet('sofia', 1024, 1600); puppets.push(sofia); game.addChild(sofia); LK.setTimeout(function () { sofia.appear(); sofia.bobAnimation(); }, 500); } function showScene5() { sceneText.setText('Powerpuff Girls'); tween(sceneText, { alpha: 1 }, { duration: 500 }); var blossom = new Puppet('blossom', 700, 1600); var bubbles = new Puppet('bubbles', 1024, 1600); var buttercup = new Puppet('buttercup', 1300, 1600); puppets.push(blossom); puppets.push(bubbles); puppets.push(buttercup); game.addChild(blossom); game.addChild(bubbles); game.addChild(buttercup); LK.setTimeout(function () { blossom.appear(); blossom.bobAnimation(); }, 300); LK.setTimeout(function () { bubbles.appear(); bubbles.bobAnimation(); }, 600); LK.setTimeout(function () { buttercup.appear(); buttercup.bobAnimation(); }, 900); } function showScene6() { sceneText.setText('So Much Christmas'); tween(sceneText, { alpha: 1 }, { duration: 500 }); LK.getSound('christmas').play(); // Create snowfall for (var i = 0; i < 30; i++) { var snowflake = new Snowflake(); snowflake.y = Math.random() * 2732; snowflakes.push(snowflake); game.addChild(snowflake); } // Create sparkles for (var i = 0; i < 20; i++) { var sparkle = new Sparkle(); sparkles.push(sparkle); game.addChild(sparkle); LK.setTimeout(function () { for (var j = 0; j < sparkles.length; j++) { if (sparkles[j].parent) { sparkles[j].sparkle(); } } }, i * 200); } } function nextScene() { if (sceneActive) { sceneActive = false; // Hide scene text tween(sceneText, { alpha: 0 }, { duration: 500 }); // Hide puppets for (var i = 0; i < puppets.length; i++) { puppets[i].disappear(); } currentScene++; if (currentScene >= maxScenes) { currentScene = 0; } LK.setTimeout(function () { startScene(); }, 1000); } } game.down = function (x, y, obj) { if (!curtainRaised) { raiseCurtain(); } else { nextScene(); } }; game.update = function () { if (sceneActive) { sceneTimer++; // Auto advance scenes after 4 seconds if (sceneTimer >= 240) { nextScene(); } } };
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var Puppet = Container.expand(function (assetId, startX, startY) {
var self = Container.call(this);
var puppetGraphics = self.attachAsset(assetId, {
anchorX: 0.5,
anchorY: 1.0
});
self.x = startX;
self.y = startY;
self.alpha = 0;
self.scaleX = 0.8;
self.scaleY = 0.8;
self.appear = function () {
tween(self, {
alpha: 1,
scaleX: 1,
scaleY: 1
}, {
duration: 800,
easing: tween.easeOut
});
};
self.bobAnimation = function () {
tween(self, {
y: self.y - 30
}, {
duration: 1000,
easing: tween.easeInOut,
onFinish: function onFinish() {
tween(self, {
y: self.y + 30
}, {
duration: 1000,
easing: tween.easeInOut,
onFinish: function onFinish() {
if (self.parent) {
self.bobAnimation();
}
}
});
}
});
};
self.disappear = function () {
tween(self, {
alpha: 0,
scaleX: 0.8,
scaleY: 0.8
}, {
duration: 500,
easing: tween.easeIn
});
};
return self;
});
var Snowflake = Container.expand(function () {
var self = Container.call(this);
var snowGraphics = self.attachAsset('snowflake', {
anchorX: 0.5,
anchorY: 0.5
});
self.x = Math.random() * 2048;
self.y = -50;
self.speed = 2 + Math.random() * 3;
self.sway = Math.random() * 2 - 1;
self.update = function () {
self.y += self.speed;
self.x += self.sway;
if (self.y > 2732 + 50) {
self.y = -50;
self.x = Math.random() * 2048;
}
};
return self;
});
var Sparkle = Container.expand(function () {
var self = Container.call(this);
var sparkleGraphics = self.attachAsset('sparkle', {
anchorX: 0.5,
anchorY: 0.5
});
self.x = Math.random() * 2048;
self.y = Math.random() * 2732;
self.alpha = 0;
self.scaleX = 0.5;
self.scaleY = 0.5;
self.sparkle = function () {
tween(self, {
alpha: 1,
scaleX: 2,
scaleY: 2
}, {
duration: 500,
easing: tween.easeOut,
onFinish: function onFinish() {
tween(self, {
alpha: 0,
scaleX: 0.5,
scaleY: 0.5
}, {
duration: 500,
easing: tween.easeIn
});
}
});
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x2F1B14
});
/****
* Game Code
****/
var currentScene = 0;
var maxScenes = 6;
var sceneTimer = 0;
var sceneActive = false;
var curtainRaised = false;
var puppets = [];
var snowflakes = [];
var sparkles = [];
// Create theater stage
var stage = game.addChild(LK.getAsset('stage', {
anchorX: 0.5,
anchorY: 1.0,
x: 1024,
y: 2200
}));
// Create curtain
var curtain = game.addChild(LK.getAsset('curtain', {
anchorX: 0.5,
anchorY: 0.0,
x: 1024,
y: 900
}));
// Create curtain rope
var curtainRope = game.addChild(LK.getAsset('curtainRope', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
y: 880
}));
// Create title text
var titleText = new Text2('Puppet Show Theater', {
size: 120,
fill: 0xFFD700
});
titleText.anchor.set(0.5, 0.5);
titleText.x = 1024;
titleText.y = 400;
game.addChild(titleText);
// Create tap instruction
var tapText = new Text2('Tap the red curtain to begin!', {
size: 80,
fill: 0xFFFFFF
});
tapText.anchor.set(0.5, 0.5);
tapText.x = 1024;
tapText.y = 600;
game.addChild(tapText);
// Create scene text
var sceneText = new Text2('', {
size: 100,
fill: 0xFFFFFF
});
sceneText.anchor.set(0.5, 0.5);
sceneText.x = 1024;
sceneText.y = 700;
sceneText.alpha = 0;
game.addChild(sceneText);
function raiseCurtain() {
if (!curtainRaised) {
curtainRaised = true;
LK.getSound('curtainUp').play();
tapText.alpha = 0;
tween(curtain, {
y: 600
}, {
duration: 1500,
easing: tween.easeOut,
onFinish: function onFinish() {
startScene();
}
});
tween(curtainRope, {
y: 580
}, {
duration: 1500,
easing: tween.easeOut
});
}
}
function startScene() {
sceneActive = true;
sceneTimer = 0;
// Clear previous puppets
for (var i = 0; i < puppets.length; i++) {
puppets[i].destroy();
}
puppets = [];
// Clear previous effects
for (var i = 0; i < snowflakes.length; i++) {
snowflakes[i].destroy();
}
snowflakes = [];
for (var i = 0; i < sparkles.length; i++) {
sparkles[i].destroy();
}
sparkles = [];
LK.getSound('sceneChange').play();
switch (currentScene) {
case 0:
showScene1();
break;
case 1:
showScene2();
break;
case 2:
showScene3();
break;
case 3:
showScene4();
break;
case 4:
showScene5();
break;
case 5:
showScene6();
break;
}
}
function showScene1() {
sceneText.setText('Cody Fox & Lily Fish');
tween(sceneText, {
alpha: 1
}, {
duration: 500
});
var codfox = new Puppet('codfox', 800, 1600);
var lilyfish = new Puppet('lilyfish', 1200, 1600);
puppets.push(codfox);
puppets.push(lilyfish);
game.addChild(codfox);
game.addChild(lilyfish);
LK.setTimeout(function () {
codfox.appear();
codfox.bobAnimation();
}, 500);
LK.setTimeout(function () {
lilyfish.appear();
lilyfish.bobAnimation();
}, 1000);
}
function showScene2() {
sceneText.setText('Twilight Sparkle');
tween(sceneText, {
alpha: 1
}, {
duration: 500
});
var twilight = new Puppet('twilight', 1024, 1600);
puppets.push(twilight);
game.addChild(twilight);
LK.setTimeout(function () {
twilight.appear();
twilight.bobAnimation();
}, 500);
}
function showScene3() {
sceneText.setText('PJ Masks Heroes');
tween(sceneText, {
alpha: 1
}, {
duration: 500
});
var catboy = new Puppet('catboy', 700, 1600);
var owlette = new Puppet('owlette', 1024, 1600);
var gekko = new Puppet('gekko', 1300, 1600);
puppets.push(catboy);
puppets.push(owlette);
puppets.push(gekko);
game.addChild(catboy);
game.addChild(owlette);
game.addChild(gekko);
LK.setTimeout(function () {
catboy.appear();
catboy.bobAnimation();
}, 300);
LK.setTimeout(function () {
owlette.appear();
owlette.bobAnimation();
}, 600);
LK.setTimeout(function () {
gekko.appear();
gekko.bobAnimation();
}, 900);
}
function showScene4() {
sceneText.setText('Princess Sofia');
tween(sceneText, {
alpha: 1
}, {
duration: 500
});
var sofia = new Puppet('sofia', 1024, 1600);
puppets.push(sofia);
game.addChild(sofia);
LK.setTimeout(function () {
sofia.appear();
sofia.bobAnimation();
}, 500);
}
function showScene5() {
sceneText.setText('Powerpuff Girls');
tween(sceneText, {
alpha: 1
}, {
duration: 500
});
var blossom = new Puppet('blossom', 700, 1600);
var bubbles = new Puppet('bubbles', 1024, 1600);
var buttercup = new Puppet('buttercup', 1300, 1600);
puppets.push(blossom);
puppets.push(bubbles);
puppets.push(buttercup);
game.addChild(blossom);
game.addChild(bubbles);
game.addChild(buttercup);
LK.setTimeout(function () {
blossom.appear();
blossom.bobAnimation();
}, 300);
LK.setTimeout(function () {
bubbles.appear();
bubbles.bobAnimation();
}, 600);
LK.setTimeout(function () {
buttercup.appear();
buttercup.bobAnimation();
}, 900);
}
function showScene6() {
sceneText.setText('So Much Christmas');
tween(sceneText, {
alpha: 1
}, {
duration: 500
});
LK.getSound('christmas').play();
// Create snowfall
for (var i = 0; i < 30; i++) {
var snowflake = new Snowflake();
snowflake.y = Math.random() * 2732;
snowflakes.push(snowflake);
game.addChild(snowflake);
}
// Create sparkles
for (var i = 0; i < 20; i++) {
var sparkle = new Sparkle();
sparkles.push(sparkle);
game.addChild(sparkle);
LK.setTimeout(function () {
for (var j = 0; j < sparkles.length; j++) {
if (sparkles[j].parent) {
sparkles[j].sparkle();
}
}
}, i * 200);
}
}
function nextScene() {
if (sceneActive) {
sceneActive = false;
// Hide scene text
tween(sceneText, {
alpha: 0
}, {
duration: 500
});
// Hide puppets
for (var i = 0; i < puppets.length; i++) {
puppets[i].disappear();
}
currentScene++;
if (currentScene >= maxScenes) {
currentScene = 0;
}
LK.setTimeout(function () {
startScene();
}, 1000);
}
}
game.down = function (x, y, obj) {
if (!curtainRaised) {
raiseCurtain();
} else {
nextScene();
}
};
game.update = function () {
if (sceneActive) {
sceneTimer++;
// Auto advance scenes after 4 seconds
if (sceneTimer >= 240) {
nextScene();
}
}
};