User prompt
Make the level text in a black box that fits the text
User prompt
When player on next level hide found Labubu on the level that the player completed
User prompt
When it is the next level hide the found labubus
User prompt
Make it so when the player is on next level hide found Labubus
Code edit (1 edits merged)
Please save this source code
User prompt
Labubu Hide & Seek Adventure
Initial prompt
Labubu hide & seek
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); var storage = LK.import("@upit/storage.v1"); /**** * Classes ****/ var HidingSpot = Container.expand(function (spotType, isCorrectSpot) { var self = Container.call(this); var spotGraphics = self.attachAsset(spotType, { anchorX: 0.5, anchorY: 0.5 }); self.isCorrect = isCorrectSpot; self.hasBeenSearched = false; self.down = function (x, y, obj) { if (self.hasBeenSearched) return; self.hasBeenSearched = true; if (self.isCorrect) { // Found Labubu! LK.getSound('foundLabubu').play(); foundLabubu = true; // Show Labubu with celebration animation var labubuSprite = game.addChild(LK.getAsset('labubu', { anchorX: 0.5, anchorY: 0.5, x: self.x, y: self.y, scaleX: 0.1, scaleY: 0.1 })); // Animate Labubu appearing tween(labubuSprite, { scaleX: 1.5, scaleY: 1.5 }, { duration: 500, easing: tween.bounceOut, onFinish: function onFinish() { tween(labubuSprite, { scaleX: 1, scaleY: 1 }, { duration: 200 }); } }); // Flash the hiding spot green LK.effects.flashObject(self, 0x00FF00, 1000); } else { // Wrong spot LK.getSound('wrongSearch').play(); // Flash red and shake LK.effects.flashObject(self, 0xFF0000, 500); // Shake animation var originalX = self.x; tween(self, { x: originalX - 10 }, { duration: 50, onFinish: function onFinish() { tween(self, { x: originalX + 10 }, { duration: 50, onFinish: function onFinish() { tween(self, { x: originalX }, { duration: 50 }); } }); } }); } // Create search effect var effect = game.addChild(LK.getAsset('searchEffect', { anchorX: 0.5, anchorY: 0.5, x: self.x, y: self.y, alpha: 0.7 })); // Animate search effect tween(effect, { scaleX: 2, scaleY: 2, alpha: 0 }, { duration: 300, onFinish: function onFinish() { effect.destroy(); } }); }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x87CEEB }); /**** * Game Code ****/ // Game state variables var currentLevel = storage.currentLevel || 1; var foundLabubu = false; var searchAttempts = 0; var maxAttempts = 5; var hidingSpots = []; var hintTimer = null; // Create background var background = game.addChild(LK.getAsset('background', { anchorX: 0, anchorY: 0, x: 0, y: 0 })); // Create UI elements var levelText = new Text2('Level ' + currentLevel, { size: 80, fill: 0xFFFFFF }); levelText.anchor.set(0.5, 0); LK.gui.top.addChild(levelText); levelText.y = 100; var instructionText = new Text2('Tap to find Labubu!', { size: 60, fill: 0xFFFFFF }); instructionText.anchor.set(0.5, 0); LK.gui.top.addChild(instructionText); instructionText.y = 200; var attemptsText = new Text2('Searches: ' + searchAttempts + '/' + maxAttempts, { size: 50, fill: 0xFFFFFF }); attemptsText.anchor.set(0, 0); LK.gui.topLeft.addChild(attemptsText); attemptsText.x = 120; attemptsText.y = 50; // Function to create a new level function createLevel() { // Clear existing hiding spots for (var i = 0; i < hidingSpots.length; i++) { hidingSpots[i].destroy(); } hidingSpots = []; // Reset game state foundLabubu = false; searchAttempts = 0; // Update UI levelText.setText('Level ' + currentLevel); attemptsText.setText('Searches: ' + searchAttempts + '/' + maxAttempts); // Create hiding spots based on level var numSpots = Math.min(3 + currentLevel, 8); var correctSpotIndex = Math.floor(Math.random() * numSpots); for (var i = 0; i < numSpots; i++) { var spotType = 'hidingSpot' + (Math.floor(Math.random() * 5) + 1); var isCorrect = i === correctSpotIndex; var spot = game.addChild(new HidingSpot(spotType, isCorrect)); // Position spots randomly but ensure they don't overlap var placed = false; var attempts = 0; while (!placed && attempts < 50) { spot.x = 200 + Math.random() * 1648; spot.y = 400 + Math.random() * 1800; var overlapping = false; for (var j = 0; j < hidingSpots.length; j++) { var distance = Math.sqrt(Math.pow(spot.x - hidingSpots[j].x, 2) + Math.pow(spot.y - hidingSpots[j].y, 2)); if (distance < 250) { overlapping = true; break; } } if (!overlapping) { placed = true; } attempts++; } hidingSpots.push(spot); } // Start hint timer if (hintTimer) { LK.clearTimeout(hintTimer); } hintTimer = LK.setTimeout(function () { showHint(); }, 10000); // Show hint after 10 seconds } // Function to show hint function showHint() { // Find the correct hiding spot for (var i = 0; i < hidingSpots.length; i++) { if (hidingSpots[i].isCorrect) { // Subtle glow effect as hint tween(hidingSpots[i], { alpha: 0.7 }, { duration: 500, onFinish: function onFinish() { tween(hidingSpots[i], { alpha: 1 }, { duration: 500 }); } }); break; } } } // Game over function function gameOver() { // Show game over message var gameOverText = new Text2('Game Over! Try Again!', { size: 80, fill: 0xFF0000 }); gameOverText.anchor.set(0.5, 0.5); gameOverText.x = 1024; gameOverText.y = 1366; game.addChild(gameOverText); // Reset to level 1 after delay LK.setTimeout(function () { currentLevel = 1; storage.currentLevel = currentLevel; createLevel(); gameOverText.destroy(); }, 2000); } // Level complete function function completeLevel() { currentLevel++; storage.currentLevel = currentLevel; // Add score for completing level LK.setScore(LK.getScore() + 100 * currentLevel); // Show level complete message var completeText = new Text2('Labubu Found! Next Level!', { size: 80, fill: 0x00FF00 }); completeText.anchor.set(0.5, 0.5); completeText.x = 1024; completeText.y = 1366; game.addChild(completeText); // Check for win condition if (currentLevel > 10) { LK.setTimeout(function () { LK.showYouWin(); }, 2000); return; } // Continue to next level LK.setTimeout(function () { createLevel(); completeText.destroy(); }, 2000); } // Game events game.down = function (x, y, obj) { if (foundLabubu) return; searchAttempts++; attemptsText.setText('Searches: ' + searchAttempts + '/' + maxAttempts); // Check if search limit reached if (searchAttempts >= maxAttempts && !foundLabubu) { gameOver(); } }; // Game update loop game.update = function () { // Check if Labubu was found if (foundLabubu) { // Clear hint timer if (hintTimer) { LK.clearTimeout(hintTimer); hintTimer = null; } // Wait a moment then complete level LK.setTimeout(function () { completeLevel(); }, 1500); foundLabubu = false; // Reset for next check } }; // Initialize first level createLevel();
===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,294 @@
-/****
+/****
+* Plugins
+****/
+var tween = LK.import("@upit/tween.v1");
+var storage = LK.import("@upit/storage.v1");
+
+/****
+* Classes
+****/
+var HidingSpot = Container.expand(function (spotType, isCorrectSpot) {
+ var self = Container.call(this);
+ var spotGraphics = self.attachAsset(spotType, {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.isCorrect = isCorrectSpot;
+ self.hasBeenSearched = false;
+ self.down = function (x, y, obj) {
+ if (self.hasBeenSearched) return;
+ self.hasBeenSearched = true;
+ if (self.isCorrect) {
+ // Found Labubu!
+ LK.getSound('foundLabubu').play();
+ foundLabubu = true;
+ // Show Labubu with celebration animation
+ var labubuSprite = game.addChild(LK.getAsset('labubu', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ x: self.x,
+ y: self.y,
+ scaleX: 0.1,
+ scaleY: 0.1
+ }));
+ // Animate Labubu appearing
+ tween(labubuSprite, {
+ scaleX: 1.5,
+ scaleY: 1.5
+ }, {
+ duration: 500,
+ easing: tween.bounceOut,
+ onFinish: function onFinish() {
+ tween(labubuSprite, {
+ scaleX: 1,
+ scaleY: 1
+ }, {
+ duration: 200
+ });
+ }
+ });
+ // Flash the hiding spot green
+ LK.effects.flashObject(self, 0x00FF00, 1000);
+ } else {
+ // Wrong spot
+ LK.getSound('wrongSearch').play();
+ // Flash red and shake
+ LK.effects.flashObject(self, 0xFF0000, 500);
+ // Shake animation
+ var originalX = self.x;
+ tween(self, {
+ x: originalX - 10
+ }, {
+ duration: 50,
+ onFinish: function onFinish() {
+ tween(self, {
+ x: originalX + 10
+ }, {
+ duration: 50,
+ onFinish: function onFinish() {
+ tween(self, {
+ x: originalX
+ }, {
+ duration: 50
+ });
+ }
+ });
+ }
+ });
+ }
+ // Create search effect
+ var effect = game.addChild(LK.getAsset('searchEffect', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ x: self.x,
+ y: self.y,
+ alpha: 0.7
+ }));
+ // Animate search effect
+ tween(effect, {
+ scaleX: 2,
+ scaleY: 2,
+ alpha: 0
+ }, {
+ duration: 300,
+ onFinish: function onFinish() {
+ effect.destroy();
+ }
+ });
+ };
+ return self;
+});
+
+/****
* Initialize Game
-****/
+****/
var game = new LK.Game({
- backgroundColor: 0x000000
-});
\ No newline at end of file
+ backgroundColor: 0x87CEEB
+});
+
+/****
+* Game Code
+****/
+// Game state variables
+var currentLevel = storage.currentLevel || 1;
+var foundLabubu = false;
+var searchAttempts = 0;
+var maxAttempts = 5;
+var hidingSpots = [];
+var hintTimer = null;
+// Create background
+var background = game.addChild(LK.getAsset('background', {
+ anchorX: 0,
+ anchorY: 0,
+ x: 0,
+ y: 0
+}));
+// Create UI elements
+var levelText = new Text2('Level ' + currentLevel, {
+ size: 80,
+ fill: 0xFFFFFF
+});
+levelText.anchor.set(0.5, 0);
+LK.gui.top.addChild(levelText);
+levelText.y = 100;
+var instructionText = new Text2('Tap to find Labubu!', {
+ size: 60,
+ fill: 0xFFFFFF
+});
+instructionText.anchor.set(0.5, 0);
+LK.gui.top.addChild(instructionText);
+instructionText.y = 200;
+var attemptsText = new Text2('Searches: ' + searchAttempts + '/' + maxAttempts, {
+ size: 50,
+ fill: 0xFFFFFF
+});
+attemptsText.anchor.set(0, 0);
+LK.gui.topLeft.addChild(attemptsText);
+attemptsText.x = 120;
+attemptsText.y = 50;
+// Function to create a new level
+function createLevel() {
+ // Clear existing hiding spots
+ for (var i = 0; i < hidingSpots.length; i++) {
+ hidingSpots[i].destroy();
+ }
+ hidingSpots = [];
+ // Reset game state
+ foundLabubu = false;
+ searchAttempts = 0;
+ // Update UI
+ levelText.setText('Level ' + currentLevel);
+ attemptsText.setText('Searches: ' + searchAttempts + '/' + maxAttempts);
+ // Create hiding spots based on level
+ var numSpots = Math.min(3 + currentLevel, 8);
+ var correctSpotIndex = Math.floor(Math.random() * numSpots);
+ for (var i = 0; i < numSpots; i++) {
+ var spotType = 'hidingSpot' + (Math.floor(Math.random() * 5) + 1);
+ var isCorrect = i === correctSpotIndex;
+ var spot = game.addChild(new HidingSpot(spotType, isCorrect));
+ // Position spots randomly but ensure they don't overlap
+ var placed = false;
+ var attempts = 0;
+ while (!placed && attempts < 50) {
+ spot.x = 200 + Math.random() * 1648;
+ spot.y = 400 + Math.random() * 1800;
+ var overlapping = false;
+ for (var j = 0; j < hidingSpots.length; j++) {
+ var distance = Math.sqrt(Math.pow(spot.x - hidingSpots[j].x, 2) + Math.pow(spot.y - hidingSpots[j].y, 2));
+ if (distance < 250) {
+ overlapping = true;
+ break;
+ }
+ }
+ if (!overlapping) {
+ placed = true;
+ }
+ attempts++;
+ }
+ hidingSpots.push(spot);
+ }
+ // Start hint timer
+ if (hintTimer) {
+ LK.clearTimeout(hintTimer);
+ }
+ hintTimer = LK.setTimeout(function () {
+ showHint();
+ }, 10000); // Show hint after 10 seconds
+}
+// Function to show hint
+function showHint() {
+ // Find the correct hiding spot
+ for (var i = 0; i < hidingSpots.length; i++) {
+ if (hidingSpots[i].isCorrect) {
+ // Subtle glow effect as hint
+ tween(hidingSpots[i], {
+ alpha: 0.7
+ }, {
+ duration: 500,
+ onFinish: function onFinish() {
+ tween(hidingSpots[i], {
+ alpha: 1
+ }, {
+ duration: 500
+ });
+ }
+ });
+ break;
+ }
+ }
+}
+// Game over function
+function gameOver() {
+ // Show game over message
+ var gameOverText = new Text2('Game Over! Try Again!', {
+ size: 80,
+ fill: 0xFF0000
+ });
+ gameOverText.anchor.set(0.5, 0.5);
+ gameOverText.x = 1024;
+ gameOverText.y = 1366;
+ game.addChild(gameOverText);
+ // Reset to level 1 after delay
+ LK.setTimeout(function () {
+ currentLevel = 1;
+ storage.currentLevel = currentLevel;
+ createLevel();
+ gameOverText.destroy();
+ }, 2000);
+}
+// Level complete function
+function completeLevel() {
+ currentLevel++;
+ storage.currentLevel = currentLevel;
+ // Add score for completing level
+ LK.setScore(LK.getScore() + 100 * currentLevel);
+ // Show level complete message
+ var completeText = new Text2('Labubu Found! Next Level!', {
+ size: 80,
+ fill: 0x00FF00
+ });
+ completeText.anchor.set(0.5, 0.5);
+ completeText.x = 1024;
+ completeText.y = 1366;
+ game.addChild(completeText);
+ // Check for win condition
+ if (currentLevel > 10) {
+ LK.setTimeout(function () {
+ LK.showYouWin();
+ }, 2000);
+ return;
+ }
+ // Continue to next level
+ LK.setTimeout(function () {
+ createLevel();
+ completeText.destroy();
+ }, 2000);
+}
+// Game events
+game.down = function (x, y, obj) {
+ if (foundLabubu) return;
+ searchAttempts++;
+ attemptsText.setText('Searches: ' + searchAttempts + '/' + maxAttempts);
+ // Check if search limit reached
+ if (searchAttempts >= maxAttempts && !foundLabubu) {
+ gameOver();
+ }
+};
+// Game update loop
+game.update = function () {
+ // Check if Labubu was found
+ if (foundLabubu) {
+ // Clear hint timer
+ if (hintTimer) {
+ LK.clearTimeout(hintTimer);
+ hintTimer = null;
+ }
+ // Wait a moment then complete level
+ LK.setTimeout(function () {
+ completeLevel();
+ }, 1500);
+ foundLabubu = false; // Reset for next check
+ }
+};
+// Initialize first level
+createLevel();
\ No newline at end of file
Pink Labubu. In-Game asset. 2d. High contrast. No shadows
Tree. In-Game asset. 2d. High contrast. No shadows
Purple box. In-Game asset. 2d. High contrast. No shadows
Fish statue. In-Game asset. 2d. High contrast. No shadows
Green bush. In-Game asset. 2d. High contrast. No shadows
Red car. In-Game asset. 2d. High contrast. No shadows