/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ var PowerpuffGirl = Container.expand(function (color, startX) { var self = Container.call(this); var girl = self.attachAsset(color === 0xFF69B4 ? 'powerpuffGirl1' : color === 0x87CEEB ? 'powerpuffGirl2' : 'powerpuffGirl3', { anchorX: 0.5, anchorY: 1.0 }); self.x = startX; self.y = 2732 - 100; self.baseY = self.y; self.floatOffset = Math.random() * Math.PI * 2; self.update = function () { self.y = self.baseY + Math.sin(LK.ticks * 0.05 + self.floatOffset) * 10; }; return self; }); var ScanLine = Container.expand(function () { var self = Container.call(this); var line = self.attachAsset('scanLine', { anchorX: 0.5, anchorY: 0.5, alpha: 0.8 }); self.speed = 15; self.update = function () { self.y += self.speed; if (self.y > screenBottom + 10) { self.y = screenTop - 10; } }; return self; }); var StaticLine = Container.expand(function () { var self = Container.call(this); var line = self.attachAsset('staticLine', { anchorX: 0.5, anchorY: 0.5, alpha: 0.3 }); self.speed = Math.random() * 10 + 5; self.update = function () { self.y += self.speed; self.alpha = Math.random() * 0.5 + 0.1; if (self.y > screenBottom + 50) { self.y = screenTop - 50; self.x = Math.random() * 1200 + screenLeft; } }; return self; }); var YogiBear = Container.expand(function () { var self = Container.call(this); var bear = self.attachAsset('yogiBear', { anchorX: 0.5, anchorY: 0.5 }); self.x = 1024; self.y = screenTop + 450; self.baseX = self.x; self.visible = false; self.update = function () { if (self.visible) { self.x = self.baseX + Math.sin(LK.ticks * 0.03) * 20; } }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x1a1a1a }); /**** * Game Code ****/ // TV positioning var tvCenterX = 1024; var tvCenterY = 1200; // Screen boundaries var screenLeft = tvCenterX - 600; var screenRight = tvCenterX + 600; var screenTop = tvCenterY - 450; var screenBottom = tvCenterY + 450; // Create TV stand var tvStand = game.addChild(LK.getAsset('tvStand', { anchorX: 0.5, anchorY: 0.5, x: tvCenterX, y: 2200 })); // Create TV frame var tvFrame = game.addChild(LK.getAsset('tvFrame', { anchorX: 0.5, anchorY: 0.5, x: tvCenterX, y: tvCenterY })); // Create TV screen var tvScreen = game.addChild(LK.getAsset('tvScreen', { anchorX: 0.5, anchorY: 0.5, x: tvCenterX, y: tvCenterY })); // Create play button var playButton = game.addChild(LK.getAsset('playButton', { anchorX: 0.5, anchorY: 0.5, x: tvCenterX, y: tvCenterY + 200 })); // Create play button text var playText = new Text2('PLAY', { size: 40, fill: 0xFFFFFF }); playText.anchor.set(0.5, 0.5); playText.x = tvCenterX; playText.y = tvCenterY + 200; game.addChild(playText); // Create Powerpuff Girls var blossom = game.addChild(new PowerpuffGirl(0xFF69B4, 300)); var bubbles = game.addChild(new PowerpuffGirl(0x87CEEB, 1024)); var buttercup = game.addChild(new PowerpuffGirl(0x90EE90, 1748)); // Create Yogi Bear var yogiBear = game.addChild(new YogiBear()); // Static effects var staticLines = []; var scanLines = []; // Game state var isPlaying = false; var staticIntensity = 0.5; // Initialize static lines for (var i = 0; i < 15; i++) { var staticLine = new StaticLine(); staticLine.x = Math.random() * 1200 + screenLeft; staticLine.y = Math.random() * 900 + screenTop; staticLines.push(staticLine); game.addChild(staticLine); } // Initialize scan lines for (var j = 0; j < 5; j++) { var scanLine = new ScanLine(); scanLine.x = tvCenterX; scanLine.y = screenTop + j * 180; scanLines.push(scanLine); game.addChild(scanLine); } // Handle play button press playButton.down = function (x, y, obj) { if (!isPlaying) { isPlaying = true; yogiBear.visible = true; playButton.visible = false; playText.visible = false; LK.getSound('buttonClick').play(); // Reduce static when playing staticIntensity = 0.2; // Add screen color tint for retro effect tween(tvScreen, { tint: 0x003300 }, { duration: 1000 }); // Flash effect LK.effects.flashObject(tvScreen, 0x004400, 500); } }; // TV static effect timer var staticTimer = LK.setInterval(function () { if (Math.random() < 0.1) { LK.getSound('tvStatic').play(); } }, 2000); game.update = function () { // Update static effect intensity for (var i = 0; i < staticLines.length; i++) { var line = staticLines[i]; if (Math.random() < staticIntensity) { line.visible = true; line.alpha = Math.random() * 0.6; } else { line.visible = false; } } // Screen flicker effect if (isPlaying && Math.random() < 0.02) { tvScreen.alpha = 0.9 + Math.random() * 0.1; } // Color distortion effect if (isPlaying && LK.ticks % 120 === 0) { var colors = [0x003300, 0x330033, 0x000033, 0x003333]; var randomColor = colors[Math.floor(Math.random() * colors.length)]; tween(tvScreen, { tint: randomColor }, { duration: 200, onFinish: function onFinish() { tween(tvScreen, { tint: 0x003300 }, { duration: 300 }); } }); } }; // Play ambient retro music LK.playMusic('retroAmbient');
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var PowerpuffGirl = Container.expand(function (color, startX) {
var self = Container.call(this);
var girl = self.attachAsset(color === 0xFF69B4 ? 'powerpuffGirl1' : color === 0x87CEEB ? 'powerpuffGirl2' : 'powerpuffGirl3', {
anchorX: 0.5,
anchorY: 1.0
});
self.x = startX;
self.y = 2732 - 100;
self.baseY = self.y;
self.floatOffset = Math.random() * Math.PI * 2;
self.update = function () {
self.y = self.baseY + Math.sin(LK.ticks * 0.05 + self.floatOffset) * 10;
};
return self;
});
var ScanLine = Container.expand(function () {
var self = Container.call(this);
var line = self.attachAsset('scanLine', {
anchorX: 0.5,
anchorY: 0.5,
alpha: 0.8
});
self.speed = 15;
self.update = function () {
self.y += self.speed;
if (self.y > screenBottom + 10) {
self.y = screenTop - 10;
}
};
return self;
});
var StaticLine = Container.expand(function () {
var self = Container.call(this);
var line = self.attachAsset('staticLine', {
anchorX: 0.5,
anchorY: 0.5,
alpha: 0.3
});
self.speed = Math.random() * 10 + 5;
self.update = function () {
self.y += self.speed;
self.alpha = Math.random() * 0.5 + 0.1;
if (self.y > screenBottom + 50) {
self.y = screenTop - 50;
self.x = Math.random() * 1200 + screenLeft;
}
};
return self;
});
var YogiBear = Container.expand(function () {
var self = Container.call(this);
var bear = self.attachAsset('yogiBear', {
anchorX: 0.5,
anchorY: 0.5
});
self.x = 1024;
self.y = screenTop + 450;
self.baseX = self.x;
self.visible = false;
self.update = function () {
if (self.visible) {
self.x = self.baseX + Math.sin(LK.ticks * 0.03) * 20;
}
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x1a1a1a
});
/****
* Game Code
****/
// TV positioning
var tvCenterX = 1024;
var tvCenterY = 1200;
// Screen boundaries
var screenLeft = tvCenterX - 600;
var screenRight = tvCenterX + 600;
var screenTop = tvCenterY - 450;
var screenBottom = tvCenterY + 450;
// Create TV stand
var tvStand = game.addChild(LK.getAsset('tvStand', {
anchorX: 0.5,
anchorY: 0.5,
x: tvCenterX,
y: 2200
}));
// Create TV frame
var tvFrame = game.addChild(LK.getAsset('tvFrame', {
anchorX: 0.5,
anchorY: 0.5,
x: tvCenterX,
y: tvCenterY
}));
// Create TV screen
var tvScreen = game.addChild(LK.getAsset('tvScreen', {
anchorX: 0.5,
anchorY: 0.5,
x: tvCenterX,
y: tvCenterY
}));
// Create play button
var playButton = game.addChild(LK.getAsset('playButton', {
anchorX: 0.5,
anchorY: 0.5,
x: tvCenterX,
y: tvCenterY + 200
}));
// Create play button text
var playText = new Text2('PLAY', {
size: 40,
fill: 0xFFFFFF
});
playText.anchor.set(0.5, 0.5);
playText.x = tvCenterX;
playText.y = tvCenterY + 200;
game.addChild(playText);
// Create Powerpuff Girls
var blossom = game.addChild(new PowerpuffGirl(0xFF69B4, 300));
var bubbles = game.addChild(new PowerpuffGirl(0x87CEEB, 1024));
var buttercup = game.addChild(new PowerpuffGirl(0x90EE90, 1748));
// Create Yogi Bear
var yogiBear = game.addChild(new YogiBear());
// Static effects
var staticLines = [];
var scanLines = [];
// Game state
var isPlaying = false;
var staticIntensity = 0.5;
// Initialize static lines
for (var i = 0; i < 15; i++) {
var staticLine = new StaticLine();
staticLine.x = Math.random() * 1200 + screenLeft;
staticLine.y = Math.random() * 900 + screenTop;
staticLines.push(staticLine);
game.addChild(staticLine);
}
// Initialize scan lines
for (var j = 0; j < 5; j++) {
var scanLine = new ScanLine();
scanLine.x = tvCenterX;
scanLine.y = screenTop + j * 180;
scanLines.push(scanLine);
game.addChild(scanLine);
}
// Handle play button press
playButton.down = function (x, y, obj) {
if (!isPlaying) {
isPlaying = true;
yogiBear.visible = true;
playButton.visible = false;
playText.visible = false;
LK.getSound('buttonClick').play();
// Reduce static when playing
staticIntensity = 0.2;
// Add screen color tint for retro effect
tween(tvScreen, {
tint: 0x003300
}, {
duration: 1000
});
// Flash effect
LK.effects.flashObject(tvScreen, 0x004400, 500);
}
};
// TV static effect timer
var staticTimer = LK.setInterval(function () {
if (Math.random() < 0.1) {
LK.getSound('tvStatic').play();
}
}, 2000);
game.update = function () {
// Update static effect intensity
for (var i = 0; i < staticLines.length; i++) {
var line = staticLines[i];
if (Math.random() < staticIntensity) {
line.visible = true;
line.alpha = Math.random() * 0.6;
} else {
line.visible = false;
}
}
// Screen flicker effect
if (isPlaying && Math.random() < 0.02) {
tvScreen.alpha = 0.9 + Math.random() * 0.1;
}
// Color distortion effect
if (isPlaying && LK.ticks % 120 === 0) {
var colors = [0x003300, 0x330033, 0x000033, 0x003333];
var randomColor = colors[Math.floor(Math.random() * colors.length)];
tween(tvScreen, {
tint: randomColor
}, {
duration: 200,
onFinish: function onFinish() {
tween(tvScreen, {
tint: 0x003300
}, {
duration: 300
});
}
});
}
};
// Play ambient retro music
LK.playMusic('retroAmbient');