User prompt
Fix the back to main menu button it shows the game still
User prompt
Make the backround in the level First steps blue
User prompt
When I select red in the shop it won’t work fix it ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
You turn into red after selecting it in the shop ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
In the level dash after getting 75 points you win
User prompt
In the level dash after getting 20 points turn into wave mode and also there’s flying spikes and obstacles coming towards you until 75 points
User prompt
Fix it
Code edit (1 edits merged)
Please save this source code
User prompt
Just give people + 150 coins after winning in the level Erin’s atventure continuation thru the claim +150 coins
User prompt
It still shows it please fix it
User prompt
When I press back to main menu it shows the level and text on top of it
User prompt
Higher
User prompt
Higher
User prompt
Higher
User prompt
Put it higher
User prompt
More
User prompt
Even more
User prompt
Higher
User prompt
Put it higher
User prompt
A little bit to the left
User prompt
A little bit more
User prompt
Put it more to the right
User prompt
I see back to main menu during gameplay please fix this
User prompt
Put it more down and after winning the level
User prompt
Just put it under Tap to Start after beating it
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); var storage = LK.import("@upit/storage.v1", { coins: 0, claimed: {} }); /**** * Classes ****/ // Obstacle class (tall block) var Obstacle = Container.expand(function () { var self = Container.call(this); var obsSprite = self.attachAsset('obstacle', { anchorX: 0.5, anchorY: 1 }); self.speed = 22; self.update = function () { self.x -= self.speed; }; return self; }); // Player class var Player = Container.expand(function () { var self = Container.call(this); var playerSprite = self.attachAsset('player', { anchorX: 0.5, anchorY: 1 }); // Apply skin color if selected var skinColors = { "skin_red": 0xe74c3c, "skin_green": 0x2ecc71, "skin_gold": 0xf1c40f }; if (storage.selectedSkin && skinColors[storage.selectedSkin]) { playerSprite.color = skinColors[storage.selectedSkin]; // LK shape assets support .color property for tinting } // Physics self.vy = 0; self.isJumping = false; self.gravity = 2.2; self.jumpStrength = -48; self.groundY = 0; // Set after ground is created // Update method self.update = function () { // Apply gravity self.vy += self.gravity; self.y += self.vy; // Ground collision if (self.y > self.groundY) { self.y = self.groundY; self.vy = 0; self.isJumping = false; } }; // Jump method self.jump = function () { if (!self.isJumping && self.y >= self.groundY) { self.vy = self.jumpStrength; self.isJumping = true; // Start 360-degree rotation tween on playerSprite tween(playerSprite, { rotation: playerSprite.rotation + Math.PI * 2 }, { duration: 400, easing: tween.linear }); } }; return self; }); // Spike class (obstacle) var Spike = Container.expand(function () { var self = Container.call(this); var spikeSprite = self.attachAsset('spike', { anchorX: 0.5, anchorY: 1 }); self.speed = 22; // Moves left self.update = function () { self.x -= self.speed; }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x222831 }); /**** * Game Code ****/ // Player: blue square // Ground: gray rectangle // Spike: red triangle (approximate with a tall, thin box for MVP) // Obstacle: purple rectangle var LEVELS = [{ name: "First Steps", difficulty: "Easy", color: 0x2ecc71, minGap: 500, maxGap: 900, types: ['spike', 'obstacle', 'spike'], intro: "Welcome to your first steps!" }, { name: "Erin's Adventure", difficulty: "Medium", color: 0xf1c40f, minGap: 500, maxGap: 900, types: ['spike', 'obstacle', 'spike'], intro: "A trickier journey awaits." }, { name: "Final Steps", difficulty: "Hard", color: 0xe74c3c, minGap: 500, maxGap: 900, types: ['spike', 'obstacle', 'spike'], intro: "Only the brave survive!" }, { name: "Erin’s atventure continuation", difficulty: "Hard", color: 0x8e44ad, minGap: 320, maxGap: 480, types: ['spike', 'spike', 'obstacle', 'spike', 'spike'], intro: "The spikes are closer than ever. Time your jumps perfectly!" }, { name: "Dash", difficulty: "Extreme", color: 0x16a085, minGap: 220, maxGap: 350, types: ['spike', 'spike', 'spike', 'obstacle', 'spike', 'spike', 'spike'], intro: "Dash through a gauntlet of spikes! Can you survive?" }]; // --- MENU STATE --- var MENU_STATE = { MAIN: 0, LEVEL_SELECT: 1, PLAYING: 2 }; var menuState = MENU_STATE.MAIN; var selectedLevel = 0; // --- UI ELEMENTS --- var menuContainer = new Container(); var levelSelectContainer = new Container(); var introText = null; // --- GAME CONSTANTS --- var GROUND_HEIGHT = 120; var PLAYER_SIZE = 120; var PLAYER_START_X = 400; var OBSTACLE_MIN_GAP = 600; var OBSTACLE_MAX_GAP = 1100; var OBSTACLE_TYPES = ['spike', 'obstacle']; var OBSTACLE_Y = 2732 - GROUND_HEIGHT; // --- GAME STATE --- var player; var ground; var obstacles = []; var score = 0; var scoreTxt; var lastObstacleX = 0; var isGameOver = false; // --- UI HELPERS --- function clearMenuUI() { if (menuContainer.parent) menuContainer.parent.removeChild(menuContainer); if (levelSelectContainer.parent) levelSelectContainer.parent.removeChild(levelSelectContainer); if (introText && introText.parent) introText.parent.removeChild(introText); } // --- MAIN MENU --- function showMainMenu() { clearMenuUI(); menuState = MENU_STATE.MAIN; menuContainer.removeChildren(); // Title var title = new Text2("Geometry Dash", { size: 180, fill: 0xFFFFFF, fontWeight: "bold", stroke: 0x000000, strokeThickness: 12 }); title.anchor.set(0.5, 0); title.x = 2048 / 2; title.y = 400; menuContainer.addChild(title); // Play button var playBtn = new Text2("Play", { size: 140, fill: 0x2ECC71, fontWeight: "bold", stroke: 0x000000, strokeThickness: 10 }); playBtn.anchor.set(0.5, 0.5); playBtn.x = 2048 / 2; playBtn.y = 1000; playBtn.interactive = true; playBtn.buttonMode = true; playBtn.down = function () { showLevelSelect(); }; menuContainer.addChild(playBtn); // Shop button var shopBtn = new Text2("Shop", { size: 120, fill: 0xf1c40f, fontWeight: "bold", stroke: 0x000000, strokeThickness: 8 }); shopBtn.anchor.set(0.5, 0.5); shopBtn.x = 2048 / 2; shopBtn.y = 1200; shopBtn.interactive = true; shopBtn.buttonMode = true; shopBtn.down = function () { showShop(); }; menuContainer.addChild(shopBtn); // Add to game game.addChild(menuContainer); // Remove 'Back to Main Menu' button if present if (game.goBackBtn && game.goBackBtn.parent) { game.goBackBtn.parent.removeChild(game.goBackBtn); game.goBackBtn.visible = false; } } // --- SHOP --- var shopContainer = new Container(); var SHOP_ITEMS = [{ id: "skin_red", name: "Red Skin", price: 30, color: 0xe74c3c }, { id: "skin_green", name: "Green Skin", price: 30, color: 0x2ecc71 }, { id: "skin_gold", name: "Gold Skin", price: 100, color: 0xf1c40f }]; function showShop() { clearMenuUI(); menuState = MENU_STATE.MAIN; shopContainer.removeChildren(); // Title var shopTitle = new Text2("Shop", { size: 150, fill: 0xFFFFFF, fontWeight: "bold", stroke: 0x000000, strokeThickness: 10 }); shopTitle.anchor.set(0.5, 0); shopTitle.x = 2048 / 2; shopTitle.y = 300; shopContainer.addChild(shopTitle); // Coin display var coins = storage.coins || 0; var coinTxt = new Text2("Coins: " + coins, { size: 100, fill: 0xf1c40f, fontWeight: "bold", stroke: 0x000000, strokeThickness: 7 }); coinTxt.anchor.set(0.5, 0); coinTxt.x = 2048 / 2; coinTxt.y = 500; shopContainer.addChild(coinTxt); // List items for (var i = 0; i < SHOP_ITEMS.length; i++) { (function (idx) { var item = SHOP_ITEMS[idx]; var owned = storage["owned_" + item.id] === true; var y = 700 + idx * 220; var itemTxt = new Text2(item.name, { size: 100, fill: "#" + item.color.toString(16).padStart(6, "0"), fontWeight: "bold", stroke: 0x000000, strokeThickness: 7 }); itemTxt.anchor.set(0, 0.5); itemTxt.x = 400; itemTxt.y = y; shopContainer.addChild(itemTxt); var priceTxt = new Text2(owned ? "Owned" : item.price + " coins", { size: 90, fill: owned ? 0x2ecc71 : 0xffffff, fontWeight: "bold", stroke: 0x000000, strokeThickness: 6 }); priceTxt.anchor.set(0.5, 0.5); priceTxt.x = 1200; priceTxt.y = y; shopContainer.addChild(priceTxt); // Buy/select button var btnTxt = owned ? storage.selectedSkin === item.id ? "Selected" : "Select" : "Buy"; var btn = new Text2(btnTxt, { size: 90, fill: owned ? storage.selectedSkin === item.id ? 0x2ecc71 : 0x3498db : 0xf1c40f, fontWeight: "bold", stroke: 0x000000, strokeThickness: 6 }); btn.anchor.set(0.5, 0.5); btn.x = 1700; btn.y = y; btn.interactive = true; btn.buttonMode = true; btn.down = function () { if (owned) { // Select skin storage.selectedSkin = item.id; showShop(); } else { // Try to buy var coins = storage.coins || 0; if (coins >= item.price) { storage.coins = coins - item.price; storage["owned_" + item.id] = true; storage.selectedSkin = item.id; showShop(); } else { priceTxt.setText("Not enough!"); priceTxt.fill = 0xe74c3c; } } }; shopContainer.addChild(btn); })(i); } // Back button var backBtn = new Text2("Back", { size: 90, fill: 0x888888, fontWeight: "bold", stroke: 0x000000, strokeThickness: 6 }); backBtn.anchor.set(0.5, 0.5); backBtn.x = 2048 / 2; backBtn.y = 700 + SHOP_ITEMS.length * 220 + 100; backBtn.interactive = true; backBtn.buttonMode = true; backBtn.down = function () { // Remove shop UI before showing main menu if (shopContainer.parent) shopContainer.parent.removeChild(shopContainer); showMainMenu(); }; shopContainer.addChild(backBtn); game.addChild(shopContainer); } // --- LEVEL SELECT MENU --- function showLevelSelect() { clearMenuUI(); menuState = MENU_STATE.LEVEL_SELECT; levelSelectContainer.removeChildren(); // Title var selTitle = new Text2("Select Level", { size: 150, fill: 0xFFFFFF, fontWeight: "bold", stroke: 0x000000, strokeThickness: 10 }); selTitle.anchor.set(0.5, 0); selTitle.x = 2048 / 2; selTitle.y = 300; levelSelectContainer.addChild(selTitle); // Level buttons for (var i = 0; i < LEVELS.length; i++) { (function (idx) { var lvl = LEVELS[idx]; var btn = new Text2(lvl.name + " (" + lvl.difficulty + ")", { size: 110, fill: "#" + lvl.color.toString(16).padStart(6, "0"), fontWeight: "bold", stroke: 0x000000, strokeThickness: 8 }); btn.anchor.set(0.5, 0.5); btn.x = 2048 / 2; btn.y = 600 + idx * 250; btn.interactive = true; btn.buttonMode = true; btn.down = function () { selectedLevel = idx; showLevelIntro(); }; levelSelectContainer.addChild(btn); })(i); } // Back button var backBtn = new Text2("Back", { size: 90, fill: 0x888888, fontWeight: "bold", stroke: 0x000000, strokeThickness: 6 }); backBtn.anchor.set(0.5, 0.5); backBtn.x = 2048 / 2; backBtn.y = 600 + LEVELS.length * 250 + 100; backBtn.interactive = true; backBtn.buttonMode = true; backBtn.down = function () { showMainMenu(); }; levelSelectContainer.addChild(backBtn); game.addChild(levelSelectContainer); // Remove 'Back to Main Menu' button if present if (game.goBackBtn && game.goBackBtn.parent) { game.goBackBtn.parent.removeChild(game.goBackBtn); game.goBackBtn.visible = false; } } // --- LEVEL INTRO --- function showLevelIntro() { clearMenuUI(); menuState = MENU_STATE.LEVEL_SELECT; var lvl = LEVELS[selectedLevel]; // Coin rewards per level var COIN_REWARDS = [20, 50, 100]; var rewardText = lvl.name + "\nDifficulty: " + lvl.difficulty + "\n\n" + lvl.intro + "\n\nTap to Start"; var showClaim = false; var coinsToClaim = 0; if (storage.claimed && storage.claimed[selectedLevel] === false && storage.lastCompletedLevel !== undefined && storage.lastCompletedLevel == selectedLevel) { // Player just beat this level and hasn't claimed coins yet showClaim = true; coinsToClaim = COIN_REWARDS[selectedLevel]; rewardText += "\n\n🎉 Level Complete! 🎉\nClaim +" + coinsToClaim + " coins!"; } introText = new Text2(rewardText, { size: 100, fill: "#" + lvl.color.toString(16).padStart(6, "0"), align: "center", fontWeight: "bold", stroke: 0x000000, strokeThickness: 7 }); introText.anchor.set(0.5, 0.5); introText.x = 2048 / 2; introText.y = 1200; introText.interactive = true; introText.buttonMode = true; introText.down = function () { if (showClaim) return; // Don't start level if claim is available startLevel(selectedLevel); }; game.addChild(introText); // Show claim button if eligible if (showClaim) { var claimBtn = new Text2("Claim +" + coinsToClaim + " coins", { size: 110, fill: 0xFFD700, fontWeight: "bold", stroke: 0x000000, strokeThickness: 8 }); claimBtn.anchor.set(0.5, 0.5); claimBtn.x = 2048 / 2; claimBtn.y = introText.y + 350; claimBtn.interactive = true; claimBtn.buttonMode = true; claimBtn.down = function () { // Add coins and mark as claimed if (selectedLevel === 3) { storage.coins = (storage.coins || 0) + 150; } else { storage.coins = (storage.coins || 0) + coinsToClaim; } if (!storage.claimed) storage.claimed = {}; storage.claimed[selectedLevel] = true; // Remove lastCompletedLevel so claim can't be repeated delete storage.lastCompletedLevel; // Update UI claimBtn.setText("Claimed!"); claimBtn.interactive = false; claimBtn.buttonMode = false; }; game.addChild(claimBtn); } // Only show 'Back to Main Menu' button if player just finished a level (not on every intro) if (storage.lastCompletedLevel !== undefined && storage.lastCompletedLevel == selectedLevel) { var backToMenuBtn = new Text2("Back to Main Menu", { size: 90, fill: 0xFFD700, fontWeight: "bold", stroke: 0x000000, strokeThickness: 6 }); // Anchor to center, place further down under "Tap to Start" and Claim button if present backToMenuBtn.anchor.set(0.5, 0.5); // If claimBtn is present, place below it, else below introText var btnY = introText.y + 250; // Find claimBtn if present var claimBtnY = null; var children = game.children ? game.children.slice() : []; for (var i = 0; i < children.length; i++) { if (children[i] && children[i].text && typeof children[i].text === "string" && children[i].text.indexOf("Claim") === 0) { claimBtnY = children[i].y; break; } } if (claimBtnY !== null) { btnY = claimBtnY + 250; } // Move button a little to the left (was +700, now +550) and even higher (was btnY - 200, then btnY - 350, then btnY - 500, then btnY - 650, then btnY - 800, then btnY - 950, then btnY - 1100, now btnY - 1250) backToMenuBtn.x = 2048 / 2 + 550; backToMenuBtn.y = btnY - 1250; backToMenuBtn.interactive = true; backToMenuBtn.buttonMode = true; backToMenuBtn.visible = true; backToMenuBtn.down = function () { // Remove all Text2 children (introText, claimBtn, backToMenuBtn, etc) from game var children = game.children ? game.children.slice() : []; for (var i = 0; i < children.length; i++) { if (children[i] && children[i] instanceof Text2) { if (children[i].parent) children[i].parent.removeChild(children[i]); } } showMainMenu(); }; game.addChild(backToMenuBtn); } // Remove 'Back to Main Menu' button if present (from gameplay) if (game.goBackBtn && game.goBackBtn.parent) { game.goBackBtn.parent.removeChild(game.goBackBtn); game.goBackBtn.visible = false; } } // --- START LEVEL --- function startLevel(levelIdx) { clearMenuUI(); menuState = MENU_STATE.PLAYING; // Set level params var lvl = LEVELS[levelIdx]; OBSTACLE_MIN_GAP = lvl.minGap; OBSTACLE_MAX_GAP = lvl.maxGap; OBSTACLE_TYPES = lvl.types; // Reset game state resetGame(); // Show score scoreTxt.setText("0"); scoreTxt.visible = true; // Show ground and player if (!ground) { ground = LK.getAsset('ground', { anchorX: 0, anchorY: 1, x: 0, y: 2732 }); game.addChild(ground); } if (!player) { player = new Player(); player.x = PLAYER_START_X; player.groundY = 2732 - GROUND_HEIGHT; player.y = player.groundY; game.addChild(player); } // Initial obstacle lastObstacleX = 1200 + 700; //{2I} // Add extra distance for a longer start spawnObstacle(); // Remove 'Back to Main Menu' button if present (should only show after level complete) if (game.goBackBtn && game.goBackBtn.parent) { game.goBackBtn.parent.removeChild(game.goBackBtn); game.goBackBtn.visible = false; } // Do not show 'Back to Main Menu' button in gameplay game.goBackBtn.visible = false; } // --- SCORE TEXT --- scoreTxt = new Text2('0', { size: 120, fill: 0xFFFFFF, fontWeight: "bold", stroke: 0x000000, strokeThickness: 8 }); scoreTxt.anchor.set(0.5, 0); LK.gui.top.addChild(scoreTxt); scoreTxt.visible = false; // --- GO BACK TO MAIN MENU BUTTON (persistent for gameplay) --- game.goBackBtn = new Text2("Back to Main Menu", { size: 90, fill: 0xFFD700, fontWeight: "bold", stroke: 0x000000, strokeThickness: 6 }); game.goBackBtn.anchor.set(1, 0); game.goBackBtn.x = 2048 - 40; game.goBackBtn.y = 380; game.goBackBtn.interactive = true; game.goBackBtn.buttonMode = true; game.goBackBtn.visible = false; game.goBackBtn.down = function () { // Remove gameplay UI and go to main menu if (scoreTxt) scoreTxt.visible = false; if (game.goBackBtn && game.goBackBtn.parent) game.goBackBtn.parent.removeChild(game.goBackBtn); game.goBackBtn.visible = false; showMainMenu(); }; LK.gui.topRight.addChild(game.goBackBtn); // --- SAMPLE TEXT LABEL --- var sampleText = new Text2("Sample Text", { size: 100, fill: 0xFFD700, fontWeight: "bold", stroke: 0x000000, strokeThickness: 7 }); sampleText.anchor.set(0.5, 0.5); sampleText.x = 2048 / 2; sampleText.y = 2732 / 2; sampleText.interactive = true; sampleText.buttonMode = true; sampleText.down = function () { // Secret action: show a message or perform a hidden action LK.showMessage && LK.showMessage("You found the secret button! 🎉"); }; game.addChild(sampleText); // --- INITIALIZE: show main menu --- showMainMenu(); // Helper: spawn obstacle function spawnObstacle() { // Randomly pick type var type = OBSTACLE_TYPES[Math.floor(Math.random() * OBSTACLE_TYPES.length)]; var obs; if (type === 'spike') { obs = new Spike(); obs.x = 2048 + 100; obs.y = OBSTACLE_Y; } else { obs = new Obstacle(); obs.x = 2048 + 100; obs.y = OBSTACLE_Y; } obstacles.push(obs); game.addChild(obs); lastObstacleX = obs.x; } // Helper: reset game state function resetGame() { // Remove obstacles for (var i = 0; i < obstacles.length; i++) { obstacles[i].destroy(); } obstacles = []; // Reset player if (player) { player.x = PLAYER_START_X; player.y = player.groundY; player.vy = 0; player.isJumping = false; player.visible = true; // Make player visible again after explosion } // Reset score score = 0; scoreTxt.setText(score); lastObstacleX = 1200; isGameOver = false; } // Touch/click to jump game.down = function (x, y, obj) { if (menuState !== MENU_STATE.PLAYING) return; if (isGameOver) return; player.jump(); }; // Main update loop game.update = function () { if (menuState !== MENU_STATE.PLAYING) return; if (isGameOver) return; // Update player player.update(); // Update obstacles for (var i = obstacles.length - 1; i >= 0; i--) { var obs = obstacles[i]; obs.update(); // Remove if off screen if (obs.x < -200) { obs.destroy(); obstacles.splice(i, 1); continue; } // Collision detection if (player.intersects(obs)) { // Explode player into small pieces if (player && player.parent) { var numPieces = 12; var centerX = player.x; var centerY = player.y; var pieceSize = 32; for (var p = 0; p < numPieces; p++) { (function (pieceIdx) { var angle = Math.PI * 2 / numPieces * pieceIdx; var px = centerX; var py = centerY - PLAYER_SIZE / 2 + pieceSize / 2; var piece = new Container(); var pieceSprite = piece.attachAsset('player', { anchorX: 0.5, anchorY: 0.5, width: pieceSize, height: pieceSize }); // Use same color as player var playerSpriteRef = player && player.childAt ? player.childAt(0) : null; if (playerSpriteRef && playerSpriteRef.color) { pieceSprite.color = playerSpriteRef.color; } piece.x = px; piece.y = py; game.addChild(piece); // Animate outward with random velocity and fade out var speed = 32 + Math.random() * 32; var dx = Math.cos(angle) * speed; var dy = Math.sin(angle) * speed - 10 + Math.random() * 20; tween(piece, { x: px + dx * 16, y: py + dy * 16, alpha: 0 }, { duration: 700 + Math.random() * 200, easing: tween.easeOutCubic, onComplete: function onComplete() { piece.destroy(); } }); })(p); } // Hide player sprite immediately player.visible = false; } isGameOver = true; // Delay restart until after explosion animation LK.setTimeout(function () { startLevel(selectedLevel); }, 800); return; } } // Score: increase as player passes obstacles for (var j = 0; j < obstacles.length; j++) { var o = obstacles[j]; if (!o.passed && o.x + 60 < player.x) { o.passed = true; score += 1; scoreTxt.setText(score); } } // Win condition: pass 10 obstacles (easy), 15 (medium), 20 (hard), 30 (Erin’s atventure continuation), 40 (Dash) var winScores = [10, 15, 20, 30, 40]; if (score >= winScores[selectedLevel]) { isGameOver = true; // Mark level as completed for coin claim storage.lastCompletedLevel = selectedLevel; if (!storage.claimed) storage.claimed = {}; storage.claimed[selectedLevel] = storage.claimed[selectedLevel] || false; // Award +150 coins if Erin’s atventure continuation (index 3) // (Now handled in claim button, not here) LK.setTimeout(function () { showLevelIntro(); }, 600); return; } // Spawn new obstacles if (obstacles.length === 0 || 2048 - lastObstacleX > OBSTACLE_MIN_GAP + Math.floor(Math.random() * (OBSTACLE_MAX_GAP - OBSTACLE_MIN_GAP))) { spawnObstacle(); } }; // (gameover event handler removed, as game over popup is never shown)
===================================================================
--- original.js
+++ change.js
@@ -97,12 +97,12 @@
/****
* Game Code
****/
-// Obstacle: purple rectangle
-// Spike: red triangle (approximate with a tall, thin box for MVP)
-// Ground: gray rectangle
// Player: blue square
+// Ground: gray rectangle
+// Spike: red triangle (approximate with a tall, thin box for MVP)
+// Obstacle: purple rectangle
var LEVELS = [{
name: "First Steps",
difficulty: "Easy",
color: 0x2ecc71,
@@ -481,9 +481,13 @@
claimBtn.interactive = true;
claimBtn.buttonMode = true;
claimBtn.down = function () {
// Add coins and mark as claimed
- storage.coins = (storage.coins || 0) + coinsToClaim;
+ if (selectedLevel === 3) {
+ storage.coins = (storage.coins || 0) + 150;
+ } else {
+ storage.coins = (storage.coins || 0) + coinsToClaim;
+ }
if (!storage.claimed) storage.claimed = {};
storage.claimed[selectedLevel] = true;
// Remove lastCompletedLevel so claim can't be repeated
delete storage.lastCompletedLevel;
@@ -772,11 +776,9 @@
storage.lastCompletedLevel = selectedLevel;
if (!storage.claimed) storage.claimed = {};
storage.claimed[selectedLevel] = storage.claimed[selectedLevel] || false;
// Award +150 coins if Erin’s atventure continuation (index 3)
- if (selectedLevel === 3) {
- storage.coins = (storage.coins || 0) + 150;
- }
+ // (Now handled in claim button, not here)
LK.setTimeout(function () {
showLevelIntro();
}, 600);
return;