Code edit (1 edits merged)
Please save this source code
User prompt
Magical Tea Party
Initial prompt
Toca tea party ๐ซโ๏ธ (2011). Help blossom ๐ฉท, bubbles ๐, and buttercup ๐ have a tea party ๐ซ? Tap on the cake to eat it, tap on the teapot to pour tea for the cups, tap on the gift to open it, they be party horns, kazoos, and a doll inside gifts
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var Cake = Container.expand(function () {
var self = Container.call(this);
var cakeGraphics = self.attachAsset('cake', {
anchorX: 0.5,
anchorY: 0.5
});
self.eaten = false;
self.down = function (x, y, obj) {
if (self.eaten) return;
self.eaten = true;
LK.getSound('eat').play();
tween(cakeGraphics, {
scaleX: 0,
scaleY: 0,
alpha: 0
}, {
duration: 500,
easing: tween.easeIn,
onFinish: function onFinish() {
self.eaten = false;
cakeGraphics.scaleX = 1;
cakeGraphics.scaleY = 1;
cakeGraphics.alpha = 1;
}
});
// Make nearest character eat
var nearestCharacter = null;
var minDistance = Infinity;
for (var i = 0; i < characters.length; i++) {
var character = characters[i];
var distance = Math.sqrt(Math.pow(character.x - self.x, 2) + Math.pow(character.y - self.y, 2));
if (distance < minDistance) {
minDistance = distance;
nearestCharacter = character;
}
}
if (nearestCharacter) {
nearestCharacter.playEatAnimation();
}
};
return self;
});
var Character = Container.expand(function (characterColor, name) {
var self = Container.call(this);
var body = self.attachAsset('character', {
anchorX: 0.5,
anchorY: 1,
color: characterColor
});
self.name = name;
self.isEating = false;
self.playEatAnimation = function () {
if (self.isEating) return;
self.isEating = true;
tween(body, {
scaleY: 0.8
}, {
duration: 200,
easing: tween.easeInOut
});
tween(body, {
scaleY: 1
}, {
duration: 200,
easing: tween.easeInOut,
onFinish: function onFinish() {
self.isEating = false;
}
});
LK.getSound('cheer').play();
};
return self;
});
var GiftBox = Container.expand(function () {
var self = Container.call(this);
var boxGraphics = self.attachAsset('giftbox', {
anchorX: 0.5,
anchorY: 0.5
});
self.opened = false;
self.down = function (x, y, obj) {
if (self.opened) return;
self.opened = true;
LK.getSound('unwrap').play();
// Box opening animation
tween(boxGraphics, {
scaleY: 0.1,
alpha: 0.5
}, {
duration: 300,
easing: tween.easeIn,
onFinish: function onFinish() {
// Create random gift
var giftTypes = ['horn', 'kazoo', 'doll'];
var randomGift = giftTypes[Math.floor(Math.random() * giftTypes.length)];
var gift = self.addChild(LK.getAsset(randomGift, {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 0,
scaleY: 0
}));
// Gift pop-out animation
tween(gift, {
scaleX: 1,
scaleY: 1
}, {
duration: 500,
easing: tween.bounceOut
});
// Reset box after delay
LK.setTimeout(function () {
gift.destroy();
self.opened = false;
boxGraphics.scaleY = 1;
boxGraphics.alpha = 1;
}, 3000);
}
});
};
return self;
});
var TeaCup = Container.expand(function () {
var self = Container.call(this);
var cupGraphics = self.attachAsset('teacup', {
anchorX: 0.5,
anchorY: 0.5
});
self.filled = false;
self.tea = null;
self.steamParticles = [];
self.fill = function () {
if (self.filled) return;
self.filled = true;
// Add tea inside cup
self.tea = self.addChild(LK.getAsset('teacup', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 0.8,
scaleY: 0.3,
y: 10,
tint: 0x8B4513
}));
// Add steam effect
for (var i = 0; i < 3; i++) {
var steam = self.addChild(LK.getAsset('steam', {
anchorX: 0.5,
anchorY: 0.5,
x: (i - 1) * 15,
y: -20,
alpha: 0.7
}));
self.steamParticles.push(steam);
// Animate steam
var _animateSteam = function animateSteam(steamObj) {
tween(steamObj, {
y: steamObj.y - 50,
alpha: 0
}, {
duration: 2000,
easing: tween.easeOut,
onFinish: function onFinish() {
steamObj.y = -20;
steamObj.alpha = 0.7;
_animateSteam(steamObj);
}
});
};
_animateSteam(steam);
}
};
return self;
});
var TeaPot = Container.expand(function () {
var self = Container.call(this);
var potGraphics = self.attachAsset('teapot', {
anchorX: 0.5,
anchorY: 0.5
});
self.pouring = false;
self.down = function (x, y, obj) {
if (self.pouring) return;
self.pouring = true;
LK.getSound('pour').play();
tween(potGraphics, {
rotation: 0.5
}, {
duration: 300,
easing: tween.easeOut
});
tween(potGraphics, {
rotation: 0
}, {
duration: 300,
easing: tween.easeIn,
onFinish: function onFinish() {
self.pouring = false;
}
});
// Fill nearby empty cups
for (var i = 0; i < teacups.length; i++) {
var cup = teacups[i];
if (!cup.filled) {
cup.fill();
}
}
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x87CEEB
});
/****
* Game Code
****/
var characters = [];
var cakes = [];
var teacups = [];
var giftboxes = [];
// Create table
var table = game.addChild(LK.getAsset('table', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
y: 1400
}));
var tablecloth = game.addChild(LK.getAsset('tablecloth', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
y: 1400
}));
// Create chairs and characters
var chairPositions = [{
x: 1024,
y: 1800
},
// Bottom
{
x: 600,
y: 1200
},
// Left
{
x: 1448,
y: 1200
} // Right
];
var characterColors = [0xFF69B4, 0x98FB98, 0xFFB6C1];
var characterNames = ['Blossom', 'Bubbles', 'Buttercup'];
for (var i = 0; i < 3; i++) {
var chair = game.addChild(LK.getAsset('chair', {
anchorX: 0.5,
anchorY: 0.5,
x: chairPositions[i].x,
y: chairPositions[i].y
}));
var character = game.addChild(new Character(characterColors[i], characterNames[i]));
character.x = chairPositions[i].x;
character.y = chairPositions[i].y - 50;
characters.push(character);
}
// Create teapot at center of table
var teapot = game.addChild(new TeaPot());
teapot.x = 1024;
teapot.y = 1300;
// Create teacups around table
var cupPositions = [{
x: 900,
y: 1200
}, {
x: 1148,
y: 1200
}, {
x: 1024,
y: 1500
}];
for (var i = 0; i < 3; i++) {
var teacup = game.addChild(new TeaCup());
teacup.x = cupPositions[i].x;
teacup.y = cupPositions[i].y;
teacups.push(teacup);
}
// Create cakes on table
var cakePositions = [{
x: 800,
y: 1350
}, {
x: 1248,
y: 1350
}, {
x: 1024,
y: 1200
}];
for (var i = 0; i < 3; i++) {
var cake = game.addChild(new Cake());
cake.x = cakePositions[i].x;
cake.y = cakePositions[i].y;
cakes.push(cake);
}
// Create gift boxes around the scene
var giftPositions = [{
x: 300,
y: 1600
}, {
x: 1748,
y: 1600
}, {
x: 1024,
y: 2200
}, {
x: 200,
y: 1000
}, {
x: 1848,
y: 1000
}];
for (var i = 0; i < 5; i++) {
var giftbox = game.addChild(new GiftBox());
giftbox.x = giftPositions[i].x;
giftbox.y = giftPositions[i].y;
giftboxes.push(giftbox);
}
// Add title text
var titleText = new Text2('Magical Tea Party', {
size: 120,
fill: 0xFFFFFF
});
titleText.anchor.set(0.5, 0);
LK.gui.top.addChild(titleText);
titleText.y = 100;
game.update = function () {
// Game runs continuously without win/lose conditions
// All interactions are handled by individual object event handlers
}; ===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,347 @@
-/****
+/****
+* Plugins
+****/
+var tween = LK.import("@upit/tween.v1");
+
+/****
+* Classes
+****/
+var Cake = Container.expand(function () {
+ var self = Container.call(this);
+ var cakeGraphics = self.attachAsset('cake', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.eaten = false;
+ self.down = function (x, y, obj) {
+ if (self.eaten) return;
+ self.eaten = true;
+ LK.getSound('eat').play();
+ tween(cakeGraphics, {
+ scaleX: 0,
+ scaleY: 0,
+ alpha: 0
+ }, {
+ duration: 500,
+ easing: tween.easeIn,
+ onFinish: function onFinish() {
+ self.eaten = false;
+ cakeGraphics.scaleX = 1;
+ cakeGraphics.scaleY = 1;
+ cakeGraphics.alpha = 1;
+ }
+ });
+ // Make nearest character eat
+ var nearestCharacter = null;
+ var minDistance = Infinity;
+ for (var i = 0; i < characters.length; i++) {
+ var character = characters[i];
+ var distance = Math.sqrt(Math.pow(character.x - self.x, 2) + Math.pow(character.y - self.y, 2));
+ if (distance < minDistance) {
+ minDistance = distance;
+ nearestCharacter = character;
+ }
+ }
+ if (nearestCharacter) {
+ nearestCharacter.playEatAnimation();
+ }
+ };
+ return self;
+});
+var Character = Container.expand(function (characterColor, name) {
+ var self = Container.call(this);
+ var body = self.attachAsset('character', {
+ anchorX: 0.5,
+ anchorY: 1,
+ color: characterColor
+ });
+ self.name = name;
+ self.isEating = false;
+ self.playEatAnimation = function () {
+ if (self.isEating) return;
+ self.isEating = true;
+ tween(body, {
+ scaleY: 0.8
+ }, {
+ duration: 200,
+ easing: tween.easeInOut
+ });
+ tween(body, {
+ scaleY: 1
+ }, {
+ duration: 200,
+ easing: tween.easeInOut,
+ onFinish: function onFinish() {
+ self.isEating = false;
+ }
+ });
+ LK.getSound('cheer').play();
+ };
+ return self;
+});
+var GiftBox = Container.expand(function () {
+ var self = Container.call(this);
+ var boxGraphics = self.attachAsset('giftbox', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.opened = false;
+ self.down = function (x, y, obj) {
+ if (self.opened) return;
+ self.opened = true;
+ LK.getSound('unwrap').play();
+ // Box opening animation
+ tween(boxGraphics, {
+ scaleY: 0.1,
+ alpha: 0.5
+ }, {
+ duration: 300,
+ easing: tween.easeIn,
+ onFinish: function onFinish() {
+ // Create random gift
+ var giftTypes = ['horn', 'kazoo', 'doll'];
+ var randomGift = giftTypes[Math.floor(Math.random() * giftTypes.length)];
+ var gift = self.addChild(LK.getAsset(randomGift, {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ scaleX: 0,
+ scaleY: 0
+ }));
+ // Gift pop-out animation
+ tween(gift, {
+ scaleX: 1,
+ scaleY: 1
+ }, {
+ duration: 500,
+ easing: tween.bounceOut
+ });
+ // Reset box after delay
+ LK.setTimeout(function () {
+ gift.destroy();
+ self.opened = false;
+ boxGraphics.scaleY = 1;
+ boxGraphics.alpha = 1;
+ }, 3000);
+ }
+ });
+ };
+ return self;
+});
+var TeaCup = Container.expand(function () {
+ var self = Container.call(this);
+ var cupGraphics = self.attachAsset('teacup', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.filled = false;
+ self.tea = null;
+ self.steamParticles = [];
+ self.fill = function () {
+ if (self.filled) return;
+ self.filled = true;
+ // Add tea inside cup
+ self.tea = self.addChild(LK.getAsset('teacup', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ scaleX: 0.8,
+ scaleY: 0.3,
+ y: 10,
+ tint: 0x8B4513
+ }));
+ // Add steam effect
+ for (var i = 0; i < 3; i++) {
+ var steam = self.addChild(LK.getAsset('steam', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ x: (i - 1) * 15,
+ y: -20,
+ alpha: 0.7
+ }));
+ self.steamParticles.push(steam);
+ // Animate steam
+ var _animateSteam = function animateSteam(steamObj) {
+ tween(steamObj, {
+ y: steamObj.y - 50,
+ alpha: 0
+ }, {
+ duration: 2000,
+ easing: tween.easeOut,
+ onFinish: function onFinish() {
+ steamObj.y = -20;
+ steamObj.alpha = 0.7;
+ _animateSteam(steamObj);
+ }
+ });
+ };
+ _animateSteam(steam);
+ }
+ };
+ return self;
+});
+var TeaPot = Container.expand(function () {
+ var self = Container.call(this);
+ var potGraphics = self.attachAsset('teapot', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.pouring = false;
+ self.down = function (x, y, obj) {
+ if (self.pouring) return;
+ self.pouring = true;
+ LK.getSound('pour').play();
+ tween(potGraphics, {
+ rotation: 0.5
+ }, {
+ duration: 300,
+ easing: tween.easeOut
+ });
+ tween(potGraphics, {
+ rotation: 0
+ }, {
+ duration: 300,
+ easing: tween.easeIn,
+ onFinish: function onFinish() {
+ self.pouring = false;
+ }
+ });
+ // Fill nearby empty cups
+ for (var i = 0; i < teacups.length; i++) {
+ var cup = teacups[i];
+ if (!cup.filled) {
+ cup.fill();
+ }
+ }
+ };
+ return self;
+});
+
+/****
* Initialize Game
-****/
+****/
var game = new LK.Game({
- backgroundColor: 0x000000
-});
\ No newline at end of file
+ backgroundColor: 0x87CEEB
+});
+
+/****
+* Game Code
+****/
+var characters = [];
+var cakes = [];
+var teacups = [];
+var giftboxes = [];
+// Create table
+var table = game.addChild(LK.getAsset('table', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ x: 1024,
+ y: 1400
+}));
+var tablecloth = game.addChild(LK.getAsset('tablecloth', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ x: 1024,
+ y: 1400
+}));
+// Create chairs and characters
+var chairPositions = [{
+ x: 1024,
+ y: 1800
+},
+// Bottom
+{
+ x: 600,
+ y: 1200
+},
+// Left
+{
+ x: 1448,
+ y: 1200
+} // Right
+];
+var characterColors = [0xFF69B4, 0x98FB98, 0xFFB6C1];
+var characterNames = ['Blossom', 'Bubbles', 'Buttercup'];
+for (var i = 0; i < 3; i++) {
+ var chair = game.addChild(LK.getAsset('chair', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ x: chairPositions[i].x,
+ y: chairPositions[i].y
+ }));
+ var character = game.addChild(new Character(characterColors[i], characterNames[i]));
+ character.x = chairPositions[i].x;
+ character.y = chairPositions[i].y - 50;
+ characters.push(character);
+}
+// Create teapot at center of table
+var teapot = game.addChild(new TeaPot());
+teapot.x = 1024;
+teapot.y = 1300;
+// Create teacups around table
+var cupPositions = [{
+ x: 900,
+ y: 1200
+}, {
+ x: 1148,
+ y: 1200
+}, {
+ x: 1024,
+ y: 1500
+}];
+for (var i = 0; i < 3; i++) {
+ var teacup = game.addChild(new TeaCup());
+ teacup.x = cupPositions[i].x;
+ teacup.y = cupPositions[i].y;
+ teacups.push(teacup);
+}
+// Create cakes on table
+var cakePositions = [{
+ x: 800,
+ y: 1350
+}, {
+ x: 1248,
+ y: 1350
+}, {
+ x: 1024,
+ y: 1200
+}];
+for (var i = 0; i < 3; i++) {
+ var cake = game.addChild(new Cake());
+ cake.x = cakePositions[i].x;
+ cake.y = cakePositions[i].y;
+ cakes.push(cake);
+}
+// Create gift boxes around the scene
+var giftPositions = [{
+ x: 300,
+ y: 1600
+}, {
+ x: 1748,
+ y: 1600
+}, {
+ x: 1024,
+ y: 2200
+}, {
+ x: 200,
+ y: 1000
+}, {
+ x: 1848,
+ y: 1000
+}];
+for (var i = 0; i < 5; i++) {
+ var giftbox = game.addChild(new GiftBox());
+ giftbox.x = giftPositions[i].x;
+ giftbox.y = giftPositions[i].y;
+ giftboxes.push(giftbox);
+}
+// Add title text
+var titleText = new Text2('Magical Tea Party', {
+ size: 120,
+ fill: 0xFFFFFF
+});
+titleText.anchor.set(0.5, 0);
+LK.gui.top.addChild(titleText);
+titleText.y = 100;
+game.update = function () {
+ // Game runs continuously without win/lose conditions
+ // All interactions are handled by individual object event handlers
+};
\ No newline at end of file