/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var Character = Container.expand(function () {
var self = Container.call(this);
// Character body
var body = self.attachAsset('character', {
anchorX: 0.5,
anchorY: 1
});
// Curly hair
var hair = self.attachAsset('characterHair', {
anchorX: 0.5,
anchorY: 0.5
});
hair.x = 0;
hair.y = -160;
// Tears (initially hidden)
var leftTear = self.attachAsset('tear', {
anchorX: 0.5,
anchorY: 0
});
leftTear.x = -30;
leftTear.y = -120;
leftTear.alpha = 0;
var rightTear = self.attachAsset('tear', {
anchorX: 0.5,
anchorY: 0
});
rightTear.x = 30;
rightTear.y = -120;
rightTear.alpha = 0;
self.isScared = false;
self.scareLevel = 0;
self.scare = function () {
if (self.isScared) return;
self.isScared = true;
self.scareLevel = Math.random() * 3 + 1; // Random scare level 1-4
// Jump animation
tween(self, {
y: self.y - 50
}, {
duration: 200,
easing: tween.easeOut
});
tween(self, {
y: self.y
}, {
duration: 300,
easing: tween.bounceOut
});
// Show tears
leftTear.alpha = 1;
rightTear.alpha = 1;
// Shake animation
var originalX = self.x;
tween(self, {
x: originalX + 10
}, {
duration: 100
});
LK.setTimeout(function () {
tween(self, {
x: originalX - 10
}, {
duration: 100
});
}, 100);
LK.setTimeout(function () {
tween(self, {
x: originalX
}, {
duration: 100
});
}, 200);
// Play scream sound
LK.getSound('scream').play();
// Return to normal after 3 seconds
LK.setTimeout(function () {
self.calm();
}, 3000);
};
self.calm = function () {
self.isScared = false;
self.scareLevel = 0;
// Hide tears
tween(leftTear, {
alpha: 0
}, {
duration: 1000
});
tween(rightTear, {
alpha: 0
}, {
duration: 1000
});
};
return self;
});
var Television = Container.expand(function () {
var self = Container.call(this);
// TV frame
var frame = self.attachAsset('tvFrame', {
anchorX: 0.5,
anchorY: 0.5
});
// TV screen
var screen = self.attachAsset('tvScreen', {
anchorX: 0.5,
anchorY: 0.5
});
// Play button (initially visible)
var playBtn = self.attachAsset('playButton', {
anchorX: 0.5,
anchorY: 0.5
});
var playTriangle = self.attachAsset('playTriangle', {
anchorX: 0.5,
anchorY: 0.5
});
playTriangle.x = 10; // Offset to make it look like a play button
// Ginger character (initially hidden)
var gingerContainer = new Container();
self.addChild(gingerContainer);
gingerContainer.alpha = 0;
var gingerFace = gingerContainer.attachAsset('gingerFace', {
anchorX: 0.5,
anchorY: 0.5
});
var leftEye = gingerContainer.attachAsset('gingerEyes', {
anchorX: 0.5,
anchorY: 0.5
});
leftEye.x = -80;
leftEye.y = -50;
var rightEye = gingerContainer.attachAsset('gingerEyes', {
anchorX: 0.5,
anchorY: 0.5
});
rightEye.x = 80;
rightEye.y = -50;
var mouth = gingerContainer.attachAsset('gingerMouth', {
anchorX: 0.5,
anchorY: 0.5
});
mouth.y = 50;
self.isPlaying = false;
self.down = function (x, y, obj) {
if (!self.isPlaying && playBtn.alpha > 0) {
self.playScareVideo();
}
};
self.playScareVideo = function () {
if (self.isPlaying) return;
self.isPlaying = true;
// Hide play button
tween(playBtn, {
alpha: 0
}, {
duration: 300
});
tween(playTriangle, {
alpha: 0
}, {
duration: 300
});
// Show Ginger with dramatic entrance
gingerContainer.scaleX = 0.1;
gingerContainer.scaleY = 0.1;
gingerContainer.alpha = 1;
tween(gingerContainer, {
scaleX: 1.2,
scaleY: 1.2
}, {
duration: 500,
easing: tween.bounceOut
});
// Play BOO sound
LK.setTimeout(function () {
LK.getSound('boo').play();
// Trigger scare on all characters
for (var i = 0; i < characters.length; i++) {
characters[i].scare();
totalScore += Math.floor(characters[i].scareLevel);
}
// Update score
LK.setScore(totalScore);
scoreText.setText('Scares: ' + totalScore);
}, 300);
// Hide Ginger and show play button again after 2 seconds
LK.setTimeout(function () {
tween(gingerContainer, {
alpha: 0,
scaleX: 0.1,
scaleY: 0.1
}, {
duration: 500
});
LK.setTimeout(function () {
tween(playBtn, {
alpha: 1
}, {
duration: 500
});
tween(playTriangle, {
alpha: 1
}, {
duration: 500
});
self.isPlaying = false;
}, 1000);
}, 2000);
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x2C1810
});
/****
* Game Code
****/
var totalScore = 0;
var characters = [];
// Create TV
var tv = game.addChild(new Television());
tv.x = 2048 / 2;
tv.y = 1000;
// Create three characters
for (var i = 0; i < 3; i++) {
var character = game.addChild(new Character());
character.x = 400 + i * 600;
character.y = 1800;
characters.push(character);
}
// Score display
var scoreText = new Text2('Scares: 0', {
size: 80,
fill: 0xFFFFFF
});
scoreText.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreText);
// Instructions
var instructionText = new Text2('Tap the TV to scare the viewers!', {
size: 60,
fill: 0xFFAA00
});
instructionText.anchor.set(0.5, 0);
instructionText.y = 100;
LK.gui.top.addChild(instructionText);
// Game title
var titleText = new Text2('SPOOKY TV SCARE', {
size: 100,
fill: 0xFF6600
});
titleText.anchor.set(0.5, 0);
titleText.y = 200;
LK.gui.top.addChild(titleText); ===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,267 @@
-/****
+/****
+* Plugins
+****/
+var tween = LK.import("@upit/tween.v1");
+
+/****
+* Classes
+****/
+var Character = Container.expand(function () {
+ var self = Container.call(this);
+ // Character body
+ var body = self.attachAsset('character', {
+ anchorX: 0.5,
+ anchorY: 1
+ });
+ // Curly hair
+ var hair = self.attachAsset('characterHair', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ hair.x = 0;
+ hair.y = -160;
+ // Tears (initially hidden)
+ var leftTear = self.attachAsset('tear', {
+ anchorX: 0.5,
+ anchorY: 0
+ });
+ leftTear.x = -30;
+ leftTear.y = -120;
+ leftTear.alpha = 0;
+ var rightTear = self.attachAsset('tear', {
+ anchorX: 0.5,
+ anchorY: 0
+ });
+ rightTear.x = 30;
+ rightTear.y = -120;
+ rightTear.alpha = 0;
+ self.isScared = false;
+ self.scareLevel = 0;
+ self.scare = function () {
+ if (self.isScared) return;
+ self.isScared = true;
+ self.scareLevel = Math.random() * 3 + 1; // Random scare level 1-4
+ // Jump animation
+ tween(self, {
+ y: self.y - 50
+ }, {
+ duration: 200,
+ easing: tween.easeOut
+ });
+ tween(self, {
+ y: self.y
+ }, {
+ duration: 300,
+ easing: tween.bounceOut
+ });
+ // Show tears
+ leftTear.alpha = 1;
+ rightTear.alpha = 1;
+ // Shake animation
+ var originalX = self.x;
+ tween(self, {
+ x: originalX + 10
+ }, {
+ duration: 100
+ });
+ LK.setTimeout(function () {
+ tween(self, {
+ x: originalX - 10
+ }, {
+ duration: 100
+ });
+ }, 100);
+ LK.setTimeout(function () {
+ tween(self, {
+ x: originalX
+ }, {
+ duration: 100
+ });
+ }, 200);
+ // Play scream sound
+ LK.getSound('scream').play();
+ // Return to normal after 3 seconds
+ LK.setTimeout(function () {
+ self.calm();
+ }, 3000);
+ };
+ self.calm = function () {
+ self.isScared = false;
+ self.scareLevel = 0;
+ // Hide tears
+ tween(leftTear, {
+ alpha: 0
+ }, {
+ duration: 1000
+ });
+ tween(rightTear, {
+ alpha: 0
+ }, {
+ duration: 1000
+ });
+ };
+ return self;
+});
+var Television = Container.expand(function () {
+ var self = Container.call(this);
+ // TV frame
+ var frame = self.attachAsset('tvFrame', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ // TV screen
+ var screen = self.attachAsset('tvScreen', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ // Play button (initially visible)
+ var playBtn = self.attachAsset('playButton', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ var playTriangle = self.attachAsset('playTriangle', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ playTriangle.x = 10; // Offset to make it look like a play button
+ // Ginger character (initially hidden)
+ var gingerContainer = new Container();
+ self.addChild(gingerContainer);
+ gingerContainer.alpha = 0;
+ var gingerFace = gingerContainer.attachAsset('gingerFace', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ var leftEye = gingerContainer.attachAsset('gingerEyes', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ leftEye.x = -80;
+ leftEye.y = -50;
+ var rightEye = gingerContainer.attachAsset('gingerEyes', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ rightEye.x = 80;
+ rightEye.y = -50;
+ var mouth = gingerContainer.attachAsset('gingerMouth', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ mouth.y = 50;
+ self.isPlaying = false;
+ self.down = function (x, y, obj) {
+ if (!self.isPlaying && playBtn.alpha > 0) {
+ self.playScareVideo();
+ }
+ };
+ self.playScareVideo = function () {
+ if (self.isPlaying) return;
+ self.isPlaying = true;
+ // Hide play button
+ tween(playBtn, {
+ alpha: 0
+ }, {
+ duration: 300
+ });
+ tween(playTriangle, {
+ alpha: 0
+ }, {
+ duration: 300
+ });
+ // Show Ginger with dramatic entrance
+ gingerContainer.scaleX = 0.1;
+ gingerContainer.scaleY = 0.1;
+ gingerContainer.alpha = 1;
+ tween(gingerContainer, {
+ scaleX: 1.2,
+ scaleY: 1.2
+ }, {
+ duration: 500,
+ easing: tween.bounceOut
+ });
+ // Play BOO sound
+ LK.setTimeout(function () {
+ LK.getSound('boo').play();
+ // Trigger scare on all characters
+ for (var i = 0; i < characters.length; i++) {
+ characters[i].scare();
+ totalScore += Math.floor(characters[i].scareLevel);
+ }
+ // Update score
+ LK.setScore(totalScore);
+ scoreText.setText('Scares: ' + totalScore);
+ }, 300);
+ // Hide Ginger and show play button again after 2 seconds
+ LK.setTimeout(function () {
+ tween(gingerContainer, {
+ alpha: 0,
+ scaleX: 0.1,
+ scaleY: 0.1
+ }, {
+ duration: 500
+ });
+ LK.setTimeout(function () {
+ tween(playBtn, {
+ alpha: 1
+ }, {
+ duration: 500
+ });
+ tween(playTriangle, {
+ alpha: 1
+ }, {
+ duration: 500
+ });
+ self.isPlaying = false;
+ }, 1000);
+ }, 2000);
+ };
+ return self;
+});
+
+/****
* Initialize Game
-****/
+****/
var game = new LK.Game({
- backgroundColor: 0x000000
-});
\ No newline at end of file
+ backgroundColor: 0x2C1810
+});
+
+/****
+* Game Code
+****/
+var totalScore = 0;
+var characters = [];
+// Create TV
+var tv = game.addChild(new Television());
+tv.x = 2048 / 2;
+tv.y = 1000;
+// Create three characters
+for (var i = 0; i < 3; i++) {
+ var character = game.addChild(new Character());
+ character.x = 400 + i * 600;
+ character.y = 1800;
+ characters.push(character);
+}
+// Score display
+var scoreText = new Text2('Scares: 0', {
+ size: 80,
+ fill: 0xFFFFFF
+});
+scoreText.anchor.set(0.5, 0);
+LK.gui.top.addChild(scoreText);
+// Instructions
+var instructionText = new Text2('Tap the TV to scare the viewers!', {
+ size: 60,
+ fill: 0xFFAA00
+});
+instructionText.anchor.set(0.5, 0);
+instructionText.y = 100;
+LK.gui.top.addChild(instructionText);
+// Game title
+var titleText = new Text2('SPOOKY TV SCARE', {
+ size: 100,
+ fill: 0xFF6600
+});
+titleText.anchor.set(0.5, 0);
+titleText.y = 200;
+LK.gui.top.addChild(titleText);
\ No newline at end of file