User prompt
+1 sellect game passini oyundan kaldır
User prompt
+1 sellect game passinin tüm dosyalarınızı sil ve oyundan kaldır
User prompt
Stokta dinozorları satın alalım satmayalım ve oyundaki trex dışında tüm dinozorlar stokta olsun
User prompt
Oyuna stok sistemini şimdi ekle stok siteminde trex dışında tüm dinizorlar satılsın değerlerine göre ve nadirligine+ fiyatına göre baştan aşağı sıralansın en pahalı ve değerli olan alta em az değeli olan ve en ucuz olan en üste gitsin
User prompt
Dinzor özelliği butonuna basmadan dinozorun özelliğini kullanamayalım ve dinozor kusanma yanlar basınca çalışması
User prompt
Destansı yunurtadaki dinizorların özellikleri eski haline geri gelsin sadece destansı yumurta ama
User prompt
Nadir ve sıradan yumurtadan çıkan tüm dinizorların (PARASAUROLUPHUS, PYTHEREDON,DİMETRODON,BARYONYX,ALLO,YUTY) özellikleri her seviyede kullanılsın
User prompt
Aşırı sert bloklar mapin %25'ini kapladım
User prompt
Aşırı sert blok ten rengi olsun
User prompt
Oyuna aşırı sert blok ekle aşırı sert blok normal blokla aynı renkte olsun ama 10 vuruşta kırılsın
User prompt
Mutasyonlu DİMETRODONun özelliği ile her 3 seviyede bir maptaki en değerli 3 fosili otomatik olarak toplayalım
User prompt
Mutasyonlu BARYONYX özelliği ile her 4 seviyede bir normal blokları 1 sert blokları ise 3 vuruşta kıralım
User prompt
Destansı yunurta içerik sekmesindeki mutasyonlu BARYONYX ve mutasyonlu DİMETRODON özelliğini yerinede soru işareti koy
User prompt
Mutasyonlu PARASAUROLUPHUS özelliği ile her 2 maçta bir normal blokları 2 kere sert blokları ise 4 vuruşta kıralım ve bunu destansı yumurta içerik kısmındaki özellik yerindede güncelle
User prompt
Spino ve giganın destansı yumurta içeriği bölümündeki özellik kısmına soru işareti koy bir adet
User prompt
Spinonun özelliği her seviyede 1 kere kullanılsın ve vurduğu yere kuyruk darbesi atsın ve vurduğu yerde düz şerit halinde 3 blok kırsın (her bloğu kurabilir) ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Oyuncuların parası oyuna gir çık yaptıklarında sıfırlanmasın ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
Giganın özelliği her 3 seviyede bir kullanilsin ve tüm kayaları tek vuruşta kıralım ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Trexin mutasyonlu yumurta içeriği sekmesinde özelliğinin yazdığı yere üç tane renk değiştiren soru işareti koy ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Oyuna sert kaya ekle o kayalar gri olsun ve kırmak için 5 kere dokunmamız gereksin nirnal kayalarda 3 kere dokunulsun kırmak için
User prompt
Trexin ❗ sekmesindeki özelliğini düzelt her 10 seviyede bir kullanılsın ve kullanıldığında maptaki tüm fosilleri yüzeye çıkarsın
User prompt
Trexin özelliği her 10 seviyede 1 kere kullanılsın ve kullanıldığında kükreyecek mapteki tüm fosilleri yüzeye çıkarsın ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Oyun sekmesine dinozorun özelliği diye buton ekle ve basıldığında hangi dinozor kusanildiysa onun özelliğini kullansın
User prompt
Trexin özelliğini sıfırla artık trex her 10 seviyede bir kükreyecek ve tüm fosilleri çıkaracak ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Tüm Dinozorların özelliği ilk haline geri dönsün ilk hali ama
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); var storage = LK.import("@upit/storage.v1"); /**** * Classes ****/ var DinosaurImage = Container.expand(function (dinosaurName) { var self = Container.call(this); // Main dinosaur body var dinoBody = self.attachAsset(dinosaurName, { anchorX: 0.5, anchorY: 0.5 }); // Add red eyes var leftEye = self.attachAsset('redEye', { anchorX: 0.5, anchorY: 0.5 }); leftEye.x = -30; leftEye.y = -20; var rightEye = self.attachAsset('redEye', { anchorX: 0.5, anchorY: 0.5 }); rightEye.x = 30; rightEye.y = -20; return self; }); var Fossil = Container.expand(function (fossilType) { var self = Container.call(this); var fossilGraphics = self.attachAsset(fossilType, { anchorX: 0.5, anchorY: 0.5 }); self.fossilType = fossilType; self.isCollected = false; self.points = fossilType === 'rareFossil' ? 500 : 100; self.down = function (x, y, obj) { if (!self.isCollected) { self.collectFossil(); } }; self.collectFossil = function () { self.isCollected = true; LK.getSound('fossilFound').play(); // Apply dinosaur abilities if (selectedDinosaur === 'PYTHEREDON') { // PYTHEREDON only collects 1 fossil per level var fossilsCollectedByPytheredon = storage.fossilsCollectedByPytheredon || 0; if (fossilsCollectedByPytheredon >= 1) { // Skip collection - PYTHEREDON already collected its maximum fossil self.animateCollection(); return; } storage.fossilsCollectedByPytheredon = fossilsCollectedByPytheredon + 1; } else if (selectedDinosaur === 'Mutated DIMETRODON') { // Mutated DIMETRODON collects 3 most valuable fossils per level self.handleMutatedDimetrodonCollection(); return; } else if (selectedDinosaur === 'DIMETRODON') { // DIMETRODON collects 2 fossils regardless of rarity self.handleDimetrodonCollection(); return; } // Add fossil to inventory playerInventory.push(self.fossilType); storage.playerInventory = playerInventory; // Award points based on extraction speed var speedBonus = Math.max(0, 100 - Math.floor(levelTimer / 100)); var basePoints = self.points + speedBonus; // Apply upgrade bonus to points if dinosaur is selected var totalPoints = basePoints; if (selectedDinosaur) { totalPoints = Math.floor(basePoints * getPointsBonus(selectedDinosaur)); } // Apply 2X MONEY effect if active if (doubleMoneyLevelsLeft > 0) { totalPoints *= 2; } LK.setScore(LK.getScore() + totalPoints); scoreText.setText('Score: ' + LK.getScore()); self.animateCollection(); }; self.handleDimetrodonCollection = function () { // DIMETRODON collects 2 fossils regardless of rarity var fossilsToCollect = 2; // Add current fossil first playerInventory.push(self.fossilType); // Add one more fossil of same type playerInventory.push(self.fossilType); storage.playerInventory = playerInventory; // Award bonus points for dual collection var basePoints = self.points * fossilsToCollect; var totalPoints = basePoints; if (doubleMoneyLevelsLeft > 0) { totalPoints *= 2; } LK.setScore(LK.getScore() + totalPoints); scoreText.setText('Score: ' + LK.getScore()); self.animateCollection(); }; self.handleMutatedDimetrodonCollection = function () { // Mutated DIMETRODON collects 3 most valuable fossils per level // Find available fossils from current level var availableFossils = []; for (var i = 0; i < currentLevel.fossils.length; i++) { if (!currentLevel.fossils[i].isCollected) { availableFossils.push(currentLevel.fossils[i]); } } // Sort by fossil value (descending) availableFossils.sort(function (a, b) { return b.points - a.points; }); // Take up to 3 most valuable fossils var fossilsToCollect = Math.min(3, availableFossils.length); var totalPoints = 0; for (var j = 0; j < fossilsToCollect; j++) { playerInventory.push(availableFossils[j].fossilType); totalPoints += availableFossils[j].points; // Mark as collected availableFossils[j].isCollected = true; availableFossils[j].animateCollection(); } storage.playerInventory = playerInventory; // Apply 2X MONEY effect if active if (doubleMoneyLevelsLeft > 0) { totalPoints *= 2; } LK.setScore(LK.getScore() + totalPoints); scoreText.setText('Score: ' + LK.getScore()); self.animateCollection(); }; self.animateCollection = function () { // Animate collection tween(self, { scaleX: 1.5, scaleY: 1.5, alpha: 0 }, { duration: 500, easing: tween.easeOut, onFinish: function onFinish() { currentLevel.fossilsCollected++; currentLevel.checkLevelComplete(); } }); }; return self; }); var Level = Container.expand(function (levelNumber) { var self = Container.call(this); self.levelNumber = levelNumber; self.blocks = []; self.fossils = []; self.fossilsCollected = 0; self.totalFossils = 0; self.blocksCollected = 0; self.totalBlocks = 0; self.createLevel = function () { // Create excavation site background var site = self.attachAsset('excavationSite', { anchorX: 0.5, anchorY: 0.5 }); site.x = 1024; site.y = 1000; // Get difficulty settings for this level var difficulty = getLevelDifficulty(levelNumber); var fossilCount = difficulty.fossilCount; var blocksPerRow = difficulty.gridWidth; var rows = difficulty.gridHeight; var rareChance = difficulty.rareChance; var fossilTypes = ['fossil1', 'fossil2', 'fossil3']; // Add rare fossil chance based on level difficulty if (Math.random() < rareChance) { fossilTypes.push('rareFossil'); } self.totalFossils = fossilCount; // Create limestone blocks grid with scaling difficulty var startX = 1024 - blocksPerRow * 140 / 2 + 70; // Center the grid var startY = 600; var spacing = 140; var fossilPositions = []; for (var i = 0; i < fossilCount; i++) { var randomPos = Math.floor(Math.random() * (blocksPerRow * rows)); while (fossilPositions.indexOf(randomPos) !== -1) { randomPos = Math.floor(Math.random() * (blocksPerRow * rows)); } fossilPositions.push(randomPos); } var blockIndex = 0; for (var row = 0; row < rows; row++) { for (var col = 0; col < blocksPerRow; col++) { // Determine block type - 30% chance for hard rock var blockType = Math.random() < 0.3 ? 'hardRock' : 'limestone'; var block = new LimestoneBlock(blockType); block.x = startX + col * spacing; block.y = startY + row * spacing; // Check if this block contains a fossil if (fossilPositions.indexOf(blockIndex) !== -1) { block.hasFossil = true; var fossilTypeIndex = Math.floor(Math.random() * fossilTypes.length); block.fossilType = fossilTypes[fossilTypeIndex]; } self.blocks.push(block); self.addChild(block); blockIndex++; } } self.totalBlocks = self.blocks.length; }; self.revealFossil = function (fossilType, x, y) { var fossil = new Fossil(fossilType); fossil.x = x; fossil.y = y; // Animate fossil appearance fossil.alpha = 0; fossil.scaleX = 0; fossil.scaleY = 0; self.fossils.push(fossil); self.addChild(fossil); tween(fossil, { alpha: 1, scaleX: 1, scaleY: 1 }, { duration: 400, easing: tween.easeOut }); }; self.checkBlockCollection = function () { self.blocksCollected++; if (self.blocksCollected >= self.totalBlocks) { // All blocks collected, show any remaining fossils for (var i = 0; i < self.blocks.length; i++) { var block = self.blocks[i]; if (block.hasFossil && !block.isCollected) { self.revealFossil(block.fossilType, block.x, block.y); } } } }; self.checkLevelComplete = function () { if (self.fossilsCollected >= self.totalFossils) { LK.getSound('levelComplete').play(); // Level completion bonus with scaling difficulty var baseLevelBonus = Math.floor(currentLevelNumber / 10) * 100; // Bonus increases every 10 levels var timeBonus = Math.max(0, 1000 + baseLevelBonus - Math.floor(levelTimer / 10)); LK.setScore(LK.getScore() + timeBonus); scoreText.setText('Score: ' + LK.getScore()); // Decrease power-up counters if (xrayLevelsLeft > 0) { xrayLevelsLeft--; storage.xrayLevelsLeft = xrayLevelsLeft; } if (doubleMoneyLevelsLeft > 0) { doubleMoneyLevelsLeft--; storage.doubleMoneyLevelsLeft = doubleMoneyLevelsLeft; } // Progress to next level after delay LK.setTimeout(function () { if (currentLevelNumber < maxLevels) { // Check if next level is a puzzle level if (isPuzzleLevel(currentLevelNumber + 1)) { startPuzzleLevel(currentLevelNumber + 1); } else { startLevel(currentLevelNumber + 1); } } else { // Game complete - reset progress storage.currentLevelNumber = 1; currentLevelNumber = 1; LK.showYouWin(); } }, 2000); } }; return self; }); var LimestoneBlock = Container.expand(function (blockType) { var self = Container.call(this); self.blockType = blockType || 'limestone'; var blockGraphics = self.attachAsset(self.blockType, { anchorX: 0.5, anchorY: 0.5 }); self.hasFossil = false; self.fossilType = null; self.isCollected = false; self.hitsRequired = self.blockType === 'hardRock' ? 5 : 3; self.currentHits = 0; self.down = function (x, y, obj) { if (!self.isCollected) { self.currentHits++; if (self.currentHits >= self.hitsRequired) { self.collectBlock(); } else { // Show visual feedback for partial damage var damageAlpha = 1 - self.currentHits / self.hitsRequired * 0.6; blockGraphics.alpha = damageAlpha; LK.getSound('dig').play(); } } }; self.collectBlock = function () { // Check if dinosaur ability affects digging speed if (selectedDinosaur === 'PARASOUROLUPHUS') { // PARASOUROLUPHUS is very slow - add 1 second delay var delay = 1000; LK.setTimeout(function () { self.performCollection(); }, delay); } else if (selectedDinosaur === 'BARYONYX') { // BARYONYX is 0.2x faster (20% speed increase) var delay = 240; LK.setTimeout(function () { self.performCollection(); }, delay); } else if (selectedDinosaur === 'YUTY') { // YUTY is 0.7x faster (70% speed increase) var delay = 90; LK.setTimeout(function () { self.performCollection(); }, delay); } else if (selectedDinosaur === 'ALLO') { // ALLO is 0.4x faster (40% speed increase) var delay = 180; LK.setTimeout(function () { self.performCollection(); }, delay); } else if (selectedDinosaur === 'TREX') { // TREX roars every 10 levels and collects all fossils self.performTrexCollection(); } else if (selectedDinosaur === 'SPINO') { // SPINO tail strike breaks 3 blocks in line, 1 use per level self.performSpinoCollection(); } else if (selectedDinosaur === 'GIGA') { // GIGA breaks all rocks instantly every 3 levels if (currentLevelNumber % 3 === 0) { // Instantly break all rocks on the level for (var i = 0; i < currentLevel.blocks.length; i++) { var block = currentLevel.blocks[i]; if (!block.isCollected) { block.currentHits = block.hitsRequired; // Set hits to required amount block.performCollection(); // Break the block instantly } } } else { // Regular super mining speed for non-3rd levels var delay = 150; LK.setTimeout(function () { self.performCollection(); }, delay); } } else if (selectedDinosaur === 'Mutated BARYONYX') { // Mutated BARYONYX ability every 4 levels with reduced hits if (currentLevelNumber % 4 === 0) { // Every 4 levels, use special ability var originalHitsRequired = self.hitsRequired; // Set reduced hit requirements: normal blocks 1 hit, hard blocks 3 hits self.hitsRequired = self.blockType === 'hardRock' ? 3 : 1; // If current hits already meet new requirement, collect immediately if (self.currentHits >= self.hitsRequired) { self.performCollection(); } else { // Continue with reduced requirement var delay = 30; LK.setTimeout(function () { self.performCollection(); }, delay); } } else { // Regular faster digging on non-ability levels var delay = 30; LK.setTimeout(function () { self.performCollection(); }, delay); } } else if (selectedDinosaur === 'Mutated PARASAUROLUPHUS') { // Mutated PARASAUROLUPHUS ability every 2 matches with reduced hits var currentUsage = storage.mutatedParasaurolophusMatches || 0; currentUsage++; storage.mutatedParasaurolophusMatches = currentUsage; if (currentUsage % 2 === 0) { // Every 2 matches, use special ability var originalHitsRequired = self.hitsRequired; // Set reduced hit requirements: normal blocks 2 hits, hard blocks 4 hits self.hitsRequired = self.blockType === 'hardRock' ? 4 : 2; // If current hits already meet new requirement, collect immediately if (self.currentHits >= self.hitsRequired) { self.performCollection(); } else { // Continue with reduced requirement var delay = 1000; LK.setTimeout(function () { self.performCollection(); }, delay); } } else { // Regular slower digging on non-ability matches var delay = 2000; LK.setTimeout(function () { self.performCollection(); }, delay); } } else { self.performCollection(); } }; self.performCollection = function () { self.isCollected = true; LK.getSound('dig').play(); // Animate collection tween(self, { scaleX: 0, scaleY: 0, alpha: 0 }, { duration: 300, easing: tween.easeIn, onFinish: function onFinish() { if (self.hasFossil) { currentLevel.revealFossil(self.fossilType, self.x, self.y); } currentLevel.checkBlockCollection(); } }); }; self.performTrexCollection = function () { // TREX roars every 10 levels and collects all fossils if (currentLevelNumber % 10 === 0) { // Create roar effect with screen shake animation var roarEffect = LK.getAsset('TREX', { anchorX: 0.5, anchorY: 0.5, scaleX: 3.0, scaleY: 3.0 }); roarEffect.x = 1024; roarEffect.y = 1000; roarEffect.alpha = 0.7; roarEffect.tint = 0xFF4500; // Orange roar effect currentLevel.addChild(roarEffect); // Animate roar effect with tween tween(roarEffect, { scaleX: 5.0, scaleY: 5.0, alpha: 0 }, { duration: 2000, easing: tween.easeOut, onFinish: function onFinish() { roarEffect.destroy(); } }); // Collect all fossils on the level instantly for (var i = 0; i < currentLevel.blocks.length; i++) { var block = currentLevel.blocks[i]; if (block.hasFossil && !block.isCollected) { // Instantly reveal and collect the fossil currentLevel.revealFossil(block.fossilType, block.x, block.y); // Mark block as collected block.isCollected = true; block.alpha = 0; } } // Break current block normally self.performCollection(); } else { // Regular collection for non-10th levels self.performCollection(); } }; self.performSpinoCollection = function () { // SPINO tail strike breaks 3 blocks in a horizontal line, 1 use per level var currentUsage = storage.spinoUsageThisLevel || 0; if (currentUsage >= 1) { // Already used SPINO ability this level, perform regular collection self.performCollection(); return; } // Mark SPINO ability as used for this level storage.spinoUsageThisLevel = 1; // Create visual tail strike effect var tailStrikeEffect = LK.getAsset('SPINO', { anchorX: 0.5, anchorY: 0.5, scaleX: 2.0, scaleY: 2.0 }); tailStrikeEffect.x = self.x; tailStrikeEffect.y = self.y; tailStrikeEffect.alpha = 0.8; tailStrikeEffect.tint = 0x228B22; // Green tail strike effect currentLevel.addChild(tailStrikeEffect); // Animate tail strike effect tween(tailStrikeEffect, { scaleX: 3.5, scaleY: 1.5, alpha: 0 }, { duration: 1000, easing: tween.easeOut, onFinish: function onFinish() { tailStrikeEffect.destroy(); } }); var blocksToBreak = [self]; var currentIndex = currentLevel.blocks.indexOf(self); if (currentIndex !== -1) { var blocksPerRow = 8; var row = Math.floor(currentIndex / blocksPerRow); var col = currentIndex % blocksPerRow; // Add 2 blocks to the right for (var i = 1; i <= 2; i++) { if (col + i < blocksPerRow) { var blockIndex = row * blocksPerRow + (col + i); if (blockIndex < currentLevel.blocks.length) { var block = currentLevel.blocks[blockIndex]; if (!block.isCollected) { blocksToBreak.push(block); } } } } } // Break all blocks for (var j = 0; j < blocksToBreak.length; j++) { blocksToBreak[j].performCollection(); } }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x8B7D6B // Desert sand color }); /**** * Game Code ****/ // Background rotation system - select different background each time function selectNextBackground() { var availableBackgrounds = [0, 1, 2, 3]; // 4 different backgrounds // Remove last shown background from available options if (lastBackgroundIndex !== -1) { var lastIndex = availableBackgrounds.indexOf(lastBackgroundIndex); if (lastIndex !== -1) { availableBackgrounds.splice(lastIndex, 1); } } // Select random background from remaining options currentBackgroundIndex = availableBackgrounds[Math.floor(Math.random() * availableBackgrounds.length)]; // Save current selection as last shown storage.lastBackgroundIndex = currentBackgroundIndex; lastBackgroundIndex = currentBackgroundIndex; } // Create dynamic backgrounds based on selection function createBackground(backgroundIndex) { if (backgroundIndex === 0) { // 1. Current arid desert with gold and dinosaur bones var desertBackground = game.attachAsset('excavationSite', { anchorX: 0.5, anchorY: 0.5 }); desertBackground.x = 1024; desertBackground.y = 1366; desertBackground.alpha = 0.3; desertBackground.tint = 0xD2B48C; // Sandy brown color // Add scattered dinosaur bones and gold pieces for (var i = 0; i < 8; i++) { var bone = LK.getAsset('fossil2', { anchorX: 0.5, anchorY: 0.5, scaleX: 0.7, scaleY: 0.7 }); bone.x = 200 + Math.random() * 1648; bone.y = 1500 + Math.random() * 1000; bone.alpha = 0.4; bone.rotation = Math.random() * Math.PI * 2; game.addChild(bone); } // Add scattered gold pieces for (var j = 0; j < 6; j++) { var gold = LK.getAsset('rareFossil', { anchorX: 0.5, anchorY: 0.5, scaleX: 0.5, scaleY: 0.5 }); gold.x = 300 + Math.random() * 1448; gold.y = 1600 + Math.random() * 900; gold.alpha = 0.6; gold.tint = 0xFFD700; // Golden color game.addChild(gold); } } else if (backgroundIndex === 1) { // 2. Swampy forest with Spinosaurus and Sarcosuchus fossils var swampBackground = game.attachAsset('excavationSite', { anchorX: 0.5, anchorY: 0.5 }); swampBackground.x = 1024; swampBackground.y = 1366; swampBackground.alpha = 0.3; swampBackground.tint = 0x228B22; // Forest green color // Add shore trees along the edges using limestone blocks for (var t = 0; t < 10; t++) { var tree = LK.getAsset('limestone', { anchorX: 0.5, anchorY: 0.5, scaleX: 0.6, scaleY: 1.5 }); // Place trees along the shore (top and bottom edges) if (t < 5) { // Top shore trees tree.x = 200 + t * 300; tree.y = 800 + Math.random() * 200; } else { // Bottom shore trees tree.x = 200 + (t - 5) * 300; tree.y = 2300 + Math.random() * 200; } tree.alpha = 0.4; tree.tint = 0x8B4513; // Brown color for tree trunks game.addChild(tree); } // Add SPINO fossils scattered around for (var s = 0; s < 4; s++) { var spinoFossil = LK.getAsset('SPINO', { anchorX: 0.5, anchorY: 0.5, scaleX: 0.8, scaleY: 0.8 }); spinoFossil.x = 300 + Math.random() * 1448; spinoFossil.y = 1600 + Math.random() * 800; spinoFossil.alpha = 0.3; spinoFossil.rotation = Math.random() * Math.PI * 2; game.addChild(spinoFossil); } // Add crocodile-like fossils (using BARYONYX as substitute for Sarcosuchus) for (var c = 0; c < 3; c++) { var crocFossil = LK.getAsset('BARYONYX', { anchorX: 0.5, anchorY: 0.5, scaleX: 0.6, scaleY: 0.6 }); crocFossil.x = 400 + Math.random() * 1248; crocFossil.y = 1700 + Math.random() * 700; crocFossil.alpha = 0.3; crocFossil.rotation = Math.random() * Math.PI * 2; game.addChild(crocFossil); } } else if (backgroundIndex === 2) { // 3. Snowy mountain with GIGA and Argentavis fossils (white background) var snowyBackground = game.attachAsset('excavationSite', { anchorX: 0.5, anchorY: 0.5 }); snowyBackground.x = 1024; snowyBackground.y = 1366; snowyBackground.alpha = 0.3; snowyBackground.tint = 0xFFFFFF; // White color for snowy mountain // Add GIGA fossils scattered around for (var g = 0; g < 3; g++) { var gigaFossil = LK.getAsset('GIGA', { anchorX: 0.5, anchorY: 0.5, scaleX: 0.8, scaleY: 0.8 }); gigaFossil.x = 300 + Math.random() * 1448; gigaFossil.y = 1600 + Math.random() * 800; gigaFossil.alpha = 0.3; gigaFossil.rotation = Math.random() * Math.PI * 2; game.addChild(gigaFossil); } // Add Argentavis fossils (using YUTY as substitute for Argentavis) for (var a = 0; a < 2; a++) { var argentavisFossil = LK.getAsset('YUTY', { anchorX: 0.5, anchorY: 0.5, scaleX: 0.6, scaleY: 0.6 }); argentavisFossil.x = 400 + Math.random() * 1248; argentavisFossil.y = 1700 + Math.random() * 700; argentavisFossil.alpha = 0.3; argentavisFossil.rotation = Math.random() * Math.PI * 2; game.addChild(argentavisFossil); } // Add snow patches using limestone blocks for (var s = 0; s < 8; s++) { var snowPatch = LK.getAsset('limestone', { anchorX: 0.5, anchorY: 0.5, scaleX: 1.2, scaleY: 1.2 }); snowPatch.x = 200 + Math.random() * 1648; snowPatch.y = 1500 + Math.random() * 1000; snowPatch.alpha = 0.4; snowPatch.tint = 0xF0F8FF; // Alice blue for snow patches snowPatch.rotation = Math.random() * Math.PI * 2; game.addChild(snowPatch); } } else if (backgroundIndex === 3) { // 4. Ocean floor with Megalodon and Mosasaurus fossils (light blue background) var oceanBackground = game.attachAsset('excavationSite', { anchorX: 0.5, anchorY: 0.5 }); oceanBackground.x = 1024; oceanBackground.y = 1366; oceanBackground.alpha = 0.3; oceanBackground.tint = 0x87CEEB; // Light blue color for ocean // Add Megalodon fossils (using TREX as substitute for Megalodon) for (var m = 0; m < 2; m++) { var megalodonFossil = LK.getAsset('TREX', { anchorX: 0.5, anchorY: 0.5, scaleX: 1.0, scaleY: 1.0 }); megalodonFossil.x = 300 + Math.random() * 1448; megalodonFossil.y = 1600 + Math.random() * 800; megalodonFossil.alpha = 0.3; megalodonFossil.rotation = Math.random() * Math.PI * 2; game.addChild(megalodonFossil); } // Add Mosasaurus fossils (using SPINO as substitute for Mosasaurus) for (var mo = 0; mo < 3; mo++) { var mosasaurusFossil = LK.getAsset('SPINO', { anchorX: 0.5, anchorY: 0.5, scaleX: 0.9, scaleY: 0.9 }); mosasaurusFossil.x = 400 + Math.random() * 1248; mosasaurusFossil.y = 1700 + Math.random() * 700; mosasaurusFossil.alpha = 0.3; mosasaurusFossil.rotation = Math.random() * Math.PI * 2; game.addChild(mosasaurusFossil); } // Add coral formations using fossil shapes for (var c = 0; c < 6; c++) { var coral = LK.getAsset('fossil3', { anchorX: 0.5, anchorY: 0.5, scaleX: 0.8, scaleY: 0.8 }); coral.x = 200 + Math.random() * 1648; coral.y = 1500 + Math.random() * 1000; coral.alpha = 0.4; coral.tint = 0xFF7F50; // Coral color coral.rotation = Math.random() * Math.PI * 2; game.addChild(coral); } } } // Select and create background selectNextBackground(); createBackground(currentBackgroundIndex); // Dinosaur images with red eyes and different skin colors var gameState = 'nickname'; // 'nickname', 'playing' var playerNickname = storage.playerNickname || ''; var alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; var currentLetterIndex = 0; var currentLevelNumber = storage.currentLevelNumber || 1; var maxLevels = 200; var currentLevel = null; var levelTimer = 0; var leaderboardTexts = []; // Player data storage - Load persistent data from storage var playerCoins = storage.playerCoins || 0; var playerInventory = storage.playerInventory || []; var dinosaurCollection = storage.dinosaurCollection || []; var selectedDinosaur = storage.selectedDinosaur || null; // Ensure storage is properly initialized storage.playerCoins = playerCoins; storage.playerInventory = playerInventory; storage.dinosaurCollection = dinosaurCollection; storage.selectedDinosaur = selectedDinosaur; // Background rotation system - track last shown background var lastBackgroundIndex = storage.lastBackgroundIndex || -1; var currentBackgroundIndex = 0; // Load persistent gamepass purchases var xrayLevelsLeft = storage.xrayLevelsLeft || 0; var doubleMoneyLevelsLeft = storage.doubleMoneyLevelsLeft || 0; var doubleValueActive = storage.doubleValueActive || false; var doubleSpawnChanceActive = storage.doubleSpawnChanceActive || false; // Load persistent +1 SELECT gamepass purchases // Note: passPurchases is already loaded from storage in the showBag function // Daily gifts system - Load persistent data var lastGiftDate = storage.lastGiftDate || 0; var currentGiftDay = storage.currentGiftDay || 1; var dailyGifts = [1000, 2000, 4000, 8000, 10000, 12000, 16000]; // 7 days of gifts var dailyGiftClaimed = storage.dailyGiftClaimed || false; // Trade system - Load persistent data var dailyTradesLeft = storage.dailyTradesLeft || 5; // 5 trades per day var lastTradeDate = storage.lastTradeDate || 0; var currentTradeOffer = storage.currentTradeOffer || null; var tradeRequestsReceived = storage.tradeRequestsReceived || []; var activePlayers = ['Player1', 'Player2', 'Player3', 'Player4', 'Player5']; // Mock active players // Puzzle and difficulty system var puzzleLevels = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150, 160, 170, 180, 190, 200]; // Puzzle every 10 levels var currentPuzzle = null; var puzzleUIElements = []; function isPuzzleLevel(levelNumber) { return puzzleLevels.indexOf(levelNumber) !== -1; } function getLevelDifficulty(levelNumber) { // Calculate difficulty scaling: more fossils, less time, harder patterns var baseFossils = 3; var bonusFossils = Math.floor(levelNumber / 20); // +1 fossil every 20 levels var totalFossils = Math.min(baseFossils + bonusFossils, 10); // Max 10 fossils var baseBlocks = 48; // 8x6 grid var bonusBlocks = Math.floor(levelNumber / 25) * 8; // +8 blocks every 25 levels var totalBlocks = Math.min(baseBlocks + bonusBlocks, 80); // Max 80 blocks (10x8 grid) var rareChance = Math.min(0.05 + levelNumber * 0.002, 0.25); // Increase rare fossil chance, max 25% return { fossilCount: totalFossils, blockCount: totalBlocks, rareChance: rareChance, gridWidth: Math.min(8 + Math.floor(bonusBlocks / 8), 10), gridHeight: Math.min(6 + Math.floor(bonusBlocks / 16), 8) }; } // Stock system - Load persistent data (coming soon) var stockUIElements = []; var fossilRarities = { 'fossil1': 'common', 'fossil2': 'common', 'fossil3': 'common', 'rareFossil': 'rare' }; var fossilValues = { 'fossil1': 10, 'fossil2': 15, 'fossil3': 20, 'rareFossil': 100 }; var dinosaurRarities = { 'PARASOUROLUPHUS': 'common', 'PYTHEREDON': 'common', 'DIMETRODON': 'common', 'BARYONYX': 'rare', 'ALLO': 'rare', 'YUTY': 'rare', 'TREX': 'chromatic', 'SPINO': 'legendary', 'GIGA': 'legendary', 'Mutated BARYONYX': 'legendary', 'Mutated DIMETRODON': 'legendary', 'Mutated PARASAUROLUPHUS': 'legendary' }; // Dinosaur upgrade costs based on rarity (divided by 5 for incremental payments) var dinosaurUpgradeCosts = { 'common': 1000, // 5000 / 5 'rare': 1500, // 7500 / 5 'legendary': 2500, // 12500 / 5 'chromatic': 6000 // 30000 / 5 }; // Track dinosaur upgrade levels - now supports 3 upgrades per dinosaur var dinosaurUpgrades = storage.dinosaurUpgrades || {}; // Initialize upgrade structure for each dinosaur if not exists function initializeDinosaurUpgrades(dinosaurName) { if (!dinosaurUpgrades[dinosaurName]) { dinosaurUpgrades[dinosaurName] = { upgrade1: 0, upgrade2: 0, upgrade3: 0 }; } } // Dinosaur abilities - Original characteristics restored var dinosaurAbilities = { 'PARASOUROLUPHUS': 'slow_dig', // Very slow digging, takes more time to break blocks 'PYTHEREDON': 'limited_fossil', // Can only collect 1 fossil per level regardless of upgrades 'DIMETRODON': 'dual_fossil', // Collects 2 fossils regardless of rarity 'BARYONYX': 'speed_dig', // 20% faster digging speed 'YUTY': 'fast_dig', // 70% faster digging speed 'ALLO': 'medium_speed_dig', // 40% faster digging speed 'TREX': 'roar_collector', // Roars every 10 levels and collects all fossils 'SPINO': 'line_breaker', // Tail strike breaks 3 blocks in horizontal line, 1 use per level 'GIGA': 'super_miner', // Double mining speed 'Mutated BARYONYX': 'ultra_fast_dig', // 90% faster digging speed 'Mutated DIMETRODON': 'value_collector', // Collects 3 most valuable fossils per level 'Mutated PARASAUROLUPHUS': 'improved_slow_dig' // Faster than regular PARASAUROLUPHUS but still slower than others }; // Upgrade bonus calculation functions - now using specific upgrade types function getDigSpeedBonus(dinosaurName) { initializeDinosaurUpgrades(dinosaurName); var upgrade1Level = dinosaurUpgrades[dinosaurName].upgrade1 || 0; return Math.max(0.1, 1 - upgrade1Level * 0.15); // Each upgrade reduces dig time by 15%, minimum 10% of original time } function getUsageBonus(dinosaurName) { initializeDinosaurUpgrades(dinosaurName); var upgrade2Level = dinosaurUpgrades[dinosaurName].upgrade2 || 0; return 1 + upgrade2Level; // Each upgrade adds 1 more use } function getFossilCollectionBonus(dinosaurName) { initializeDinosaurUpgrades(dinosaurName); var upgrade2Level = dinosaurUpgrades[dinosaurName].upgrade2 || 0; return upgrade2Level; // Each upgrade adds 1 more fossil to collection abilities } function getPointsBonus(dinosaurName) { initializeDinosaurUpgrades(dinosaurName); var upgrade3Level = dinosaurUpgrades[dinosaurName].upgrade3 || 0; return 1 + upgrade3Level * 0.2; // Each upgrade adds 20% more points } // Dinosaur egg contents var commonEggDinosaurs = ['PARASOUROLUPHUS', 'PYTHEREDON', 'DIMETRODON']; var rareEggDinosaurs = [{ name: 'BARYONYX', chance: 0.45 }, { name: 'ALLO', chance: 0.35 }, { name: 'YUTY', chance: 0.20 }]; var legendaryEggDinosaurs = [{ name: 'TREX', chance: 0.03 }, { name: 'SPINO', chance: 0.10 }, { name: 'GIGA', chance: 0.15 }, { name: 'Mutated BARYONYX', chance: 0.25 }, { name: 'Mutated DIMETRODON', chance: 0.17 }, { name: 'Mutated PARASAUROLUPHUS', chance: 0.30 }]; function openEgg(eggType) { var dinosaurName = ''; if (eggType === 'common') { // Equal chance for all common dinosaurs dinosaurName = commonEggDinosaurs[Math.floor(Math.random() * commonEggDinosaurs.length)]; } else if (eggType === 'rare') { // Weighted random selection for rare dinosaurs - apply 2X LUCK if active var randomValue = Math.random(); var cumulativeChance = 0; for (var i = 0; i < rareEggDinosaurs.length; i++) { var currentChance = rareEggDinosaurs[i].chance; // Apply 2X LUCK effect if active if (doubleSpawnChanceActive) { currentChance *= 2; } cumulativeChance += currentChance; if (randomValue <= cumulativeChance) { dinosaurName = rareEggDinosaurs[i].name; break; } } } else if (eggType === 'legendary') { // Weighted random selection for legendary dinosaurs - apply 2X LUCK if active var randomValue = Math.random(); var cumulativeChance = 0; for (var i = 0; i < legendaryEggDinosaurs.length; i++) { var currentChance = legendaryEggDinosaurs[i].chance; // Apply 2X LUCK effect if active if (doubleSpawnChanceActive) { currentChance *= 2; } cumulativeChance += currentChance; if (randomValue <= cumulativeChance) { dinosaurName = legendaryEggDinosaurs[i].name; break; } } } // Reset 2X LUCK effect after use if (doubleSpawnChanceActive) { doubleSpawnChanceActive = false; storage.doubleSpawnChanceActive = doubleSpawnChanceActive; } // Add to dinosaur collection dinosaurCollection.push(dinosaurName); storage.dinosaurCollection = dinosaurCollection; // Show congratulations popup showCongratulationsPopup(dinosaurName); return dinosaurName; } function showCongratulationsPopup(dinosaurName) { gameState = 'congratulations'; // Hide all current UI hideAllStoreUI(); hideAllMenuUI(); hideAllGameUI(); // Create congratulations display var congratsTitle = new Text2('TEBRİKLER!', { size: 100, fill: '#FFD700' }); congratsTitle.anchor.set(0.5, 0.5); congratsTitle.x = 1024; congratsTitle.y = 600; game.addChild(congratsTitle); infoUIElements.push(congratsTitle); var winMessage = new Text2('KAZANDINIZ!', { size: 80, fill: '#FFFFFF' }); winMessage.anchor.set(0.5, 0.5); winMessage.x = 1024; winMessage.y = 800; game.addChild(winMessage); infoUIElements.push(winMessage); // Add dinosaur image var dinoImage = new DinosaurImage(dinosaurName); dinoImage.x = 1024; dinoImage.y = 900; dinoImage.scaleX = 2; dinoImage.scaleY = 2; game.addChild(dinoImage); infoUIElements.push(dinoImage); var dinosaurMessage = new Text2(dinosaurName, { size: 60, fill: '#32CD32' }); dinosaurMessage.anchor.set(0.5, 0.5); dinosaurMessage.x = 1024; dinosaurMessage.y = 1100; game.addChild(dinosaurMessage); infoUIElements.push(dinosaurMessage); var closeButton = game.attachAsset('startButton', { anchorX: 0.5, anchorY: 0.5 }); closeButton.x = 1024; closeButton.y = 1300; var closeButtonText = new Text2('TAMAM', { size: 35, fill: '#FFFFFF' }); closeButtonText.anchor.set(0.5, 0.5); closeButtonText.x = 1024; closeButtonText.y = 1300; game.addChild(closeButtonText); infoUIElements.push(closeButton, closeButtonText); closeButton.down = function () { hideInfoScreen(); gameState = 'nickname'; showAllMenuUI(); coinsText.setText('Coins: ' + playerCoins); }; } // UI Element arrays for different game states var menuUIElements = []; var gameUIElements = []; var storeUIElements = []; var sellUIElements = []; var bagUIElements = []; var infoUIElements = []; var giftsUIElements = []; var tradeUIElements = []; var stockUIElements = []; // UI Elements var nicknameText = new Text2('Enter Nickname: A', { size: 80, fill: '#FFFFFF' }); nicknameText.anchor.set(0.5, 0.5); nicknameText.x = 1024; nicknameText.y = 800; var instructionText = new Text2('Use arrows to select letters, ADD to add, DELETE to remove', { size: 45, fill: '#CCCCCC' }); instructionText.anchor.set(0.5, 0.5); instructionText.x = 1024; instructionText.y = 900; var scoreText = new Text2('Score: 0', { size: 60, fill: '#FFFFFF' }); scoreText.anchor.set(0, 0); var levelText = new Text2('Level: 1', { size: 60, fill: '#FFFFFF' }); levelText.anchor.set(1, 0); var timerText = new Text2('Time: 0', { size: 50, fill: '#FFFFFF' }); timerText.anchor.set(0.5, 0); // Nickname input elements var leftArrow = game.attachAsset('arrowLeft', { anchorX: 0.5, anchorY: 0.5 }); leftArrow.x = 800; leftArrow.y = 1000; var rightArrow = game.attachAsset('arrowRight', { anchorX: 0.5, anchorY: 0.5 }); rightArrow.x = 1248; rightArrow.y = 1000; var startButton = game.attachAsset('startButton', { anchorX: 0.5, anchorY: 0.5 }); startButton.x = 1024; startButton.y = 1200; var startButtonText = new Text2('START', { size: 40, fill: '#FFFFFF' }); startButtonText.anchor.set(0.5, 0.5); startButtonText.x = 1024; startButtonText.y = 1200; var addButton = game.attachAsset('startButton', { anchorX: 0.5, anchorY: 0.5 }); addButton.x = 900; addButton.y = 1100; var addButtonText = new Text2('ADD', { size: 35, fill: '#FFFFFF' }); addButtonText.anchor.set(0.5, 0.5); addButtonText.x = 900; addButtonText.y = 1100; var deleteButton = game.attachAsset('deleteButton', { anchorX: 0.5, anchorY: 0.5 }); deleteButton.x = 1148; deleteButton.y = 1100; var deleteButtonText = new Text2('DELETE', { size: 35, fill: '#FFFFFF' }); deleteButtonText.anchor.set(0.5, 0.5); deleteButtonText.x = 1148; deleteButtonText.y = 1100; var storeButton = game.attachAsset('startButton', { anchorX: 0.5, anchorY: 0.5 }); storeButton.x = 700; storeButton.y = 1300; var storeButtonText = new Text2('STORE', { size: 35, fill: '#FFFFFF' }); storeButtonText.anchor.set(0.5, 0.5); storeButtonText.x = 700; storeButtonText.y = 1300; var sellButton = game.attachAsset('startButton', { anchorX: 0.5, anchorY: 0.5 }); sellButton.x = 1348; sellButton.y = 1300; var sellButtonText = new Text2('SELL', { size: 35, fill: '#FFFFFF' }); sellButtonText.anchor.set(0.5, 0.5); sellButtonText.x = 1348; sellButtonText.y = 1300; var shopButton = game.attachAsset('startButton', { anchorX: 0.5, anchorY: 0.5 }); shopButton.x = 1024; shopButton.y = 1500; var shopButtonText = new Text2('SHOP', { size: 35, fill: '#FFFFFF' }); shopButtonText.anchor.set(0.5, 0.5); shopButtonText.x = 1024; shopButtonText.y = 1500; var bagButton = game.attachAsset('startButton', { anchorX: 0.5, anchorY: 0.5 }); bagButton.x = 1024; bagButton.y = 1600; var bagButtonText = new Text2('BAG', { size: 35, fill: '#FFFFFF' }); bagButtonText.anchor.set(0.5, 0.5); bagButtonText.x = 1024; bagButtonText.y = 1600; var tradeButton = game.attachAsset('startButton', { anchorX: 0.5, anchorY: 0.5 }); tradeButton.x = 700; tradeButton.y = 1700; var tradeButtonText = new Text2('TRADE', { size: 35, fill: '#FFFFFF' }); tradeButtonText.anchor.set(0.5, 0.5); tradeButtonText.x = 700; tradeButtonText.y = 1700; var giftsButton = game.attachAsset('startButton', { anchorX: 0.5, anchorY: 0.5 }); giftsButton.x = 1348; giftsButton.y = 1700; var giftsButtonText = new Text2('GIFTS', { size: 35, fill: '#FFFFFF' }); giftsButtonText.anchor.set(0.5, 0.5); giftsButtonText.x = 1348; giftsButtonText.y = 1700; var stockButton = game.attachAsset('startButton', { anchorX: 0.5, anchorY: 0.5 }); stockButton.x = 1024; stockButton.y = 1800; var stockButtonText = new Text2('STOCK', { size: 35, fill: '#FFFFFF' }); stockButtonText.anchor.set(0.5, 0.5); stockButtonText.x = 1024; stockButtonText.y = 1800; var coinsText = new Text2('Coins: ' + playerCoins, { size: 50, fill: '#FFD700' }); coinsText.anchor.set(0.5, 0.5); coinsText.x = 1024; coinsText.y = 1400; // Add nickname UI to game and track as menu elements game.addChild(nicknameText); game.addChild(instructionText); game.addChild(leftArrow); game.addChild(rightArrow); game.addChild(addButton); game.addChild(addButtonText); game.addChild(deleteButton); game.addChild(deleteButtonText); game.addChild(startButton); game.addChild(startButtonText); game.addChild(storeButton); game.addChild(storeButtonText); game.addChild(sellButton); game.addChild(sellButtonText); game.addChild(shopButton); game.addChild(shopButtonText); game.addChild(bagButton); game.addChild(bagButtonText); game.addChild(tradeButton); game.addChild(tradeButtonText); game.addChild(giftsButton); game.addChild(giftsButtonText); game.addChild(stockButton); game.addChild(stockButtonText); game.addChild(coinsText); // Track menu UI elements menuUIElements.push(nicknameText, instructionText, leftArrow, rightArrow, addButton, addButtonText, deleteButton, deleteButtonText, startButton, startButtonText, storeButton, storeButtonText, sellButton, sellButtonText, shopButton, shopButtonText, bagButton, bagButtonText, tradeButton, tradeButtonText, giftsButton, giftsButtonText, stockButton, stockButtonText, coinsText); // Track game UI elements gameUIElements.push(scoreText, levelText, timerText); // Add game UI to GUI LK.gui.topLeft.addChild(scoreText); scoreText.x = 120; scoreText.y = 20; scoreText.visible = false; LK.gui.topRight.addChild(levelText); levelText.y = 20; levelText.visible = false; LK.gui.top.addChild(timerText); timerText.y = 100; timerText.visible = false; function hideAllMenuUI() { for (var i = 0; i < menuUIElements.length; i++) { menuUIElements[i].visible = false; } } function showAllMenuUI() { for (var i = 0; i < menuUIElements.length; i++) { menuUIElements[i].visible = true; } } function hideAllGameUI() { for (var i = 0; i < gameUIElements.length; i++) { gameUIElements[i].visible = false; } } function showAllGameUI() { for (var i = 0; i < gameUIElements.length; i++) { gameUIElements[i].visible = true; } } function hideAllStoreUI() { for (var i = 0; i < storeUIElements.length; i++) { storeUIElements[i].destroy(); } storeUIElements = []; } function hideAllSellUI() { for (var i = 0; i < sellUIElements.length; i++) { sellUIElements[i].destroy(); } sellUIElements = []; } function hideAllBagUI() { for (var i = 0; i < bagUIElements.length; i++) { bagUIElements[i].destroy(); } bagUIElements = []; } function hideAllInfoUI() { for (var i = 0; i < infoUIElements.length; i++) { infoUIElements[i].destroy(); } infoUIElements = []; } function updateNicknameDisplay() { var currentLetter = alphabet[currentLetterIndex]; var displayText = 'Enter Nickname: ' + playerNickname + currentLetter; nicknameText.setText(displayText); // Update instruction text to show current letter selection instructionText.setText('Current Letter: ' + currentLetter + ' - Use arrows to select, ADD to add, DELETE to remove'); } function startLevel(levelNumber) { // Clean up previous level if (currentLevel) { currentLevel.destroy(); } currentLevelNumber = levelNumber; storage.currentLevelNumber = currentLevelNumber; levelTimer = 0; // Reset PYTHEREDON fossil counter for new level if (selectedDinosaur === 'PYTHEREDON') { storage.fossilsCollectedByPytheredon = 0; } // Reset SPINO usage counter for new level storage.spinoUsageThisLevel = 0; // No special ability resets needed for original abilities // Create new level currentLevel = new Level(levelNumber); currentLevel.createLevel(); game.addChild(currentLevel); levelText.setText('Level: ' + levelNumber + '/' + maxLevels); } function startPuzzleLevel(levelNumber) { // Clean up previous level if (currentLevel) { currentLevel.destroy(); } if (currentPuzzle) { currentPuzzle.destroy(); } currentLevelNumber = levelNumber; storage.currentLevelNumber = currentLevelNumber; levelTimer = 0; levelText.setText('Level: ' + levelNumber + ' (PUZZLE)'); // Create dinosaur trivia puzzle createPuzzle(0, levelNumber); } function createPuzzle(puzzleType, levelNumber) { currentPuzzle = new Container(); game.addChild(currentPuzzle); // All puzzles are now dinosaur trivia questions createDinosaurTriviaPuzzle(levelNumber); } function createDinosaurTriviaPuzzle(levelNumber) { // Create trivia questions with increasing difficulty based on level var triviaQuestions = [ // Levels 10-30: Basic questions { question: "En güçlü theropod hangisidir?", answers: ["Tyrannosaurus Rex", "Velociraptor", "Compsognathus"], correct: 0, minLevel: 10 }, { question: "En büyük sauropod hangisidir?", answers: ["Diplodocus", "Argentinasaurus", "Brachiosaurus"], correct: 1, minLevel: 10 }, { question: "En hızlı dinozor hangisidir?", answers: ["Triceratops", "Ornithomimus", "Stegosaurus"], correct: 1, minLevel: 20 }, // Levels 40-70: Intermediate questions { question: "Spinosaurus'un beslenme türü nedir?", answers: ["Otçul", "Balık yiyen", "Et yiyen"], correct: 1, minLevel: 40 }, { question: "En büyük uçan dinozor hangisidir?", answers: ["Pteranodon", "Quetzalcoatlus", "Archaeopteryx"], correct: 1, minLevel: 50 }, { question: "Triceratops kaç boynuzludur?", answers: ["İki", "Üç", "Dört"], correct: 1, minLevel: 60 }, // Levels 80-120: Advanced questions { question: "Carnotaurus'un özel özelliği nedir?", answers: ["Boynuzları", "Kanatları", "Uzun kuyruğu"], correct: 0, minLevel: 80 }, { question: "En küçük bilinen dinozor hangisidir?", answers: ["Microraptor", "Compsognathus", "Epidexipteryx"], correct: 0, minLevel: 100 }, { question: "Therizinosaurus'un beslenme türü nedir?", answers: ["Et yiyen", "Otçul", "Her şey yiyen"], correct: 1, minLevel: 110 }, // Levels 130-200: Expert questions { question: "Dracorex'in anlamı nedir?", answers: ["Ejder Kralı", "Büyük Avcı", "Hızlı Koşucu"], correct: 0, minLevel: 130 }, { question: "En uzun boyunlu dinozor hangisidir?", answers: ["Mamenchisaurus", "Supersaurus", "Giraffatitan"], correct: 0, minLevel: 150 }, { question: "Parasaurolophus'un özel özelliği nedir?", answers: ["Ses çıkarması", "Zehirli dişleri", "Renkli tüyleri"], correct: 0, minLevel: 170 }]; // Filter questions appropriate for current level var availableQuestions = []; for (var i = 0; i < triviaQuestions.length; i++) { if (levelNumber >= triviaQuestions[i].minLevel) { availableQuestions.push(triviaQuestions[i]); } } // Select random question from available ones var selectedQuestion = availableQuestions[Math.floor(Math.random() * availableQuestions.length)]; // Create puzzle title var puzzleTitle = new Text2('DİNOZOR BİLGİ YARIŞMASI', { size: 60, fill: '#FFD700' }); puzzleTitle.anchor.set(0.5, 0.5); puzzleTitle.x = 1024; puzzleTitle.y = 300; currentPuzzle.addChild(puzzleTitle); puzzleUIElements.push(puzzleTitle); // Display question var questionText = new Text2(selectedQuestion.question, { size: 50, fill: '#FFFFFF' }); questionText.anchor.set(0.5, 0.5); questionText.x = 1024; questionText.y = 600; currentPuzzle.addChild(questionText); puzzleUIElements.push(questionText); // Create answer buttons for (var a = 0; a < 3; a++) { var answerButton = currentPuzzle.attachAsset('startButton', { anchorX: 0.5, anchorY: 0.5 }); answerButton.x = 1024; answerButton.y = 900 + a * 150; currentPuzzle.addChild(answerButton); puzzleUIElements.push(answerButton); var answerText = new Text2(selectedQuestion.answers[a], { size: 40, fill: '#FFFFFF' }); answerText.anchor.set(0.5, 0.5); answerText.x = 1024; answerText.y = 900 + a * 150; currentPuzzle.addChild(answerText); puzzleUIElements.push(answerText); // Add click handler with closure (function (answerIndex, correctIndex) { answerButton.down = function () { if (answerIndex === correctIndex) { solvePuzzle(); } else { resetTriviaPuzzle(); } }; })(a, selectedQuestion.correct); } } function resetTriviaPuzzle() { // Reset puzzle on wrong answer createDinosaurTriviaPuzzle(currentLevelNumber); } function createSequencePuzzle(levelNumber) { // Sequence puzzle: Click fossils in correct order var puzzleTitle = new Text2('SEQUENCE PUZZLE - Click fossils in order!', { size: 60, fill: '#FFD700' }); puzzleTitle.anchor.set(0.5, 0.5); puzzleTitle.x = 1024; puzzleTitle.y = 300; currentPuzzle.addChild(puzzleTitle); puzzleUIElements.push(puzzleTitle); var sequenceLength = Math.min(3 + Math.floor(levelNumber / 30), 8); // Longer sequences for higher levels var correctSequence = []; var playerSequence = []; var fossils = []; // Create sequence of fossils for (var i = 0; i < sequenceLength; i++) { var fossil = currentPuzzle.attachAsset('fossil' + (i % 3 + 1), { anchorX: 0.5, anchorY: 0.5 }); fossil.x = 300 + i * 150; fossil.y = 800; fossil.sequenceNumber = i + 1; fossils.push(fossil); correctSequence.push(i); puzzleUIElements.push(fossil); var numberText = new Text2(String(i + 1), { size: 40, fill: '#FFFFFF' }); numberText.anchor.set(0.5, 0.5); numberText.x = fossil.x; numberText.y = fossil.y - 80; currentPuzzle.addChild(numberText); puzzleUIElements.push(numberText); // Add click handler (function (index, fossilObj) { fossilObj.down = function () { playerSequence.push(index); fossilObj.alpha = 0.5; if (playerSequence.length === sequenceLength) { checkSequence(); } }; })(i, fossil); } function checkSequence() { var correct = true; for (var i = 0; i < sequenceLength; i++) { if (playerSequence[i] !== correctSequence[i]) { correct = false; break; } } if (correct) { solvePuzzle(); } else { resetSequencePuzzle(); } } function resetSequencePuzzle() { playerSequence = []; for (var i = 0; i < fossils.length; i++) { fossils[i].alpha = 1; } } } function createPatternPuzzle(levelNumber) { // Pattern puzzle: Complete the fossil pattern var puzzleTitle = new Text2('PATTERN PUZZLE - Complete the pattern!', { size: 60, fill: '#FFD700' }); puzzleTitle.anchor.set(0.5, 0.5); puzzleTitle.x = 1024; puzzleTitle.y = 300; currentPuzzle.addChild(puzzleTitle); puzzleUIElements.push(puzzleTitle); var gridSize = Math.min(3 + Math.floor(levelNumber / 50), 5); // Larger grids for higher levels var pattern = []; var playerPattern = []; // Generate pattern for (var i = 0; i < gridSize * gridSize; i++) { pattern.push(Math.random() > 0.5 ? 1 : 0); } // Show pattern briefly, then hide half of it for (var row = 0; row < gridSize; row++) { for (var col = 0; col < gridSize; col++) { var index = row * gridSize + col; var shouldShow = pattern[index] === 1; var isHidden = (row + col) % 2 === 1; // Checkerboard hiding pattern var fossil = null; if (shouldShow && !isHidden) { fossil = currentPuzzle.attachAsset('fossil1', { anchorX: 0.5, anchorY: 0.5 }); } else if (shouldShow && isHidden) { fossil = currentPuzzle.attachAsset('limestone', { anchorX: 0.5, anchorY: 0.5 }); fossil.isHiddenPattern = true; fossil.correctPattern = true; } else if (isHidden) { fossil = currentPuzzle.attachAsset('limestone', { anchorX: 0.5, anchorY: 0.5 }); fossil.isHiddenPattern = true; fossil.correctPattern = false; } if (fossil) { fossil.x = 700 + col * 100; fossil.y = 600 + row * 100; fossil.gridIndex = index; puzzleUIElements.push(fossil); if (fossil.isHiddenPattern) { (function (fossilObj) { fossilObj.down = function () { if (fossilObj.correctPattern) { fossilObj.destroy(); var correctFossil = currentPuzzle.attachAsset('fossil1', { anchorX: 0.5, anchorY: 0.5 }); correctFossil.x = fossilObj.x; correctFossil.y = fossilObj.y; currentPuzzle.addChild(correctFossil); checkPatternComplete(); } else { resetPatternPuzzle(); } }; })(fossil); } } } } } function checkPatternComplete() { // Simple check - if we get here from correct clicks, puzzle is solved solvePuzzle(); } function resetPatternPuzzle() { // Reset puzzle on wrong click createPatternPuzzle(currentLevelNumber); } function createMemoryPuzzle(levelNumber) { // Memory puzzle: Remember fossil locations var puzzleTitle = new Text2('MEMORY PUZZLE - Remember the fossil locations!', { size: 60, fill: '#FFD700' }); puzzleTitle.anchor.set(0.5, 0.5); puzzleTitle.x = 1024; puzzleTitle.y = 300; currentPuzzle.addChild(puzzleTitle); puzzleUIElements.push(puzzleTitle); var fossilCount = Math.min(3 + Math.floor(levelNumber / 40), 6); var memoryPositions = []; var revealedFossils = []; // Generate random positions for (var i = 0; i < fossilCount; i++) { var pos = { x: 400 + Math.floor(Math.random() * 5) * 150, y: 600 + Math.floor(Math.random() * 3) * 150 }; memoryPositions.push(pos); var fossil = currentPuzzle.attachAsset('fossil' + (i % 3 + 1), { anchorX: 0.5, anchorY: 0.5 }); fossil.x = pos.x; fossil.y = pos.y; fossil.memoryIndex = i; currentPuzzle.addChild(fossil); revealedFossils.push(fossil); puzzleUIElements.push(fossil); } // Hide fossils after showing them briefly LK.setTimeout(function () { for (var i = 0; i < revealedFossils.length; i++) { revealedFossils[i].alpha = 0; } createMemoryGrid(); }, 2000); function createMemoryGrid() { var playerGuesses = 0; var correctGuesses = 0; for (var row = 0; row < 3; row++) { for (var col = 0; col < 5; col++) { var gridX = 400 + col * 150; var gridY = 600 + row * 150; var isCorrectPos = false; for (var p = 0; p < memoryPositions.length; p++) { if (memoryPositions[p].x === gridX && memoryPositions[p].y === gridY) { isCorrectPos = true; break; } } var gridBlock = currentPuzzle.attachAsset('limestone', { anchorX: 0.5, anchorY: 0.5 }); gridBlock.x = gridX; gridBlock.y = gridY; gridBlock.isCorrectMemory = isCorrectPos; currentPuzzle.addChild(gridBlock); puzzleUIElements.push(gridBlock); (function (blockObj) { blockObj.down = function () { playerGuesses++; if (blockObj.isCorrectMemory) { correctGuesses++; blockObj.tint = 0x00FF00; // Green for correct } else { blockObj.tint = 0xFF0000; // Red for wrong } if (playerGuesses === fossilCount) { if (correctGuesses === fossilCount) { solvePuzzle(); } else { resetMemoryPuzzle(); } } }; })(gridBlock); } } } } function resetMemoryPuzzle() { createMemoryPuzzle(currentLevelNumber); } function createLogicPuzzle(levelNumber) { // Logic puzzle: Mathematical sequence var puzzleTitle = new Text2('LOGIC PUZZLE - Complete the sequence!', { size: 60, fill: '#FFD700' }); puzzleTitle.anchor.set(0.5, 0.5); puzzleTitle.x = 1024; puzzleTitle.y = 300; currentPuzzle.addChild(puzzleTitle); puzzleUIElements.push(puzzleTitle); // Generate arithmetic sequence var startNum = Math.floor(Math.random() * 10) + 1; var step = Math.floor(Math.random() * 5) + 2; var sequence = [startNum, startNum + step, startNum + step * 2, startNum + step * 3]; var missingIndex = Math.floor(Math.random() * 4); var correctAnswer = sequence[missingIndex]; // Display sequence with missing number for (var i = 0; i < 4; i++) { var numText; if (i === missingIndex) { numText = new Text2('?', { size: 80, fill: '#FF0000' }); } else { numText = new Text2(String(sequence[i]), { size: 80, fill: '#FFFFFF' }); } numText.anchor.set(0.5, 0.5); numText.x = 600 + i * 150; numText.y = 700; currentPuzzle.addChild(numText); puzzleUIElements.push(numText); } // Create answer options var options = [correctAnswer]; for (var j = 0; j < 3; j++) { var wrongAnswer; do { wrongAnswer = correctAnswer + (Math.floor(Math.random() * 10) - 5); } while (options.indexOf(wrongAnswer) !== -1 || wrongAnswer <= 0); options.push(wrongAnswer); } // Shuffle options for (var k = options.length - 1; k > 0; k--) { var randomIndex = Math.floor(Math.random() * (k + 1)); var temp = options[k]; options[k] = options[randomIndex]; options[randomIndex] = temp; } // Display options for (var o = 0; o < options.length; o++) { var optionButton = currentPuzzle.attachAsset('startButton', { anchorX: 0.5, anchorY: 0.5 }); optionButton.x = 500 + o * 200; optionButton.y = 1000; currentPuzzle.addChild(optionButton); puzzleUIElements.push(optionButton); var optionText = new Text2(String(options[o]), { size: 60, fill: '#FFFFFF' }); optionText.anchor.set(0.5, 0.5); optionText.x = optionButton.x; optionText.y = optionButton.y; currentPuzzle.addChild(optionText); puzzleUIElements.push(optionText); (function (answer) { optionButton.down = function () { if (answer === correctAnswer) { solvePuzzle(); } else { resetLogicPuzzle(); } }; })(options[o]); } } function resetLogicPuzzle() { createLogicPuzzle(currentLevelNumber); } function solvePuzzle() { // Award bonus points for solving puzzle var puzzleBonus = 1000 * Math.floor(currentLevelNumber / 15); LK.setScore(LK.getScore() + puzzleBonus); scoreText.setText('Score: ' + LK.getScore()); // Clean up puzzle hideAllPuzzleUI(); currentPuzzle.destroy(); currentPuzzle = null; // Continue to regular level startLevel(currentLevelNumber); } function hideAllPuzzleUI() { for (var i = 0; i < puzzleUIElements.length; i++) { puzzleUIElements[i].destroy(); } puzzleUIElements = []; } function showStore() { gameState = 'store'; // Hide all menu and game UI elements hideAllMenuUI(); hideAllGameUI(); // Create store display var storeTitle = new Text2('FOSSIL STORE', { size: 80, fill: '#FFFFFF' }); storeTitle.anchor.set(0.5, 0.5); storeTitle.x = 1024; storeTitle.y = 200; game.addChild(storeTitle); storeUIElements.push(storeTitle); var backButton = game.attachAsset('startButton', { anchorX: 0.5, anchorY: 0.5 }); backButton.x = 1024; backButton.y = 1500; var backButtonText = new Text2('BACK', { size: 35, fill: '#FFFFFF' }); backButtonText.anchor.set(0.5, 0.5); backButtonText.x = 1024; backButtonText.y = 1500; game.addChild(backButtonText); storeUIElements.push(backButton, backButtonText); // Sort and display inventory by rarity var rareFossils = []; var commonFossils = []; for (var i = 0; i < playerInventory.length; i++) { if (fossilRarities[playerInventory[i]] === 'rare') { rareFossils.push(playerInventory[i]); } else { commonFossils.push(playerInventory[i]); } } var allFossils = rareFossils.concat(commonFossils); var startY = 350; for (var j = 0; j < allFossils.length; j++) { var fossilName = allFossils[j]; var rarity = fossilRarities[fossilName]; var color = rarity === 'rare' ? '#FFD700' : '#FFFFFF'; var fossilText = new Text2(fossilName + ' (' + rarity + ')', { size: 40, fill: color }); fossilText.anchor.set(0.5, 0.5); fossilText.x = 1024; fossilText.y = startY + j * 60; game.addChild(fossilText); storeUIElements.push(fossilText); } backButton.down = function () { hideStore(); }; } function hideStore() { gameState = 'nickname'; // Remove all store UI elements hideAllStoreUI(); // Restore menu UI elements showAllMenuUI(); } function showSell() { gameState = 'sell'; // Hide all menu and game UI elements hideAllMenuUI(); hideAllGameUI(); // Create sell display var sellTitle = new Text2('SELL FOSSILS', { size: 80, fill: '#FFFFFF' }); sellTitle.anchor.set(0.5, 0.5); sellTitle.x = 1024; sellTitle.y = 200; game.addChild(sellTitle); sellUIElements.push(sellTitle); var sellAllButton = game.attachAsset('startButton', { anchorX: 0.5, anchorY: 0.5 }); sellAllButton.x = 1024; sellAllButton.y = 1400; var sellAllButtonText = new Text2('SELL ALL', { size: 35, fill: '#FFFFFF' }); sellAllButtonText.anchor.set(0.5, 0.5); sellAllButtonText.x = 1024; sellAllButtonText.y = 1400; game.addChild(sellAllButtonText); sellUIElements.push(sellAllButton, sellAllButtonText); var sellBackButton = game.attachAsset('startButton', { anchorX: 0.5, anchorY: 0.5 }); sellBackButton.x = 1024; sellBackButton.y = 1600; var sellBackButtonText = new Text2('BACK', { size: 35, fill: '#FFFFFF' }); sellBackButtonText.anchor.set(0.5, 0.5); sellBackButtonText.x = 1024; sellBackButtonText.y = 1600; game.addChild(sellBackButtonText); // Add 2X MONEY use button var use2xMoneyButton = game.attachAsset('startButton', { anchorX: 0.5, anchorY: 0.5 }); use2xMoneyButton.x = 1024; use2xMoneyButton.y = 1500; var use2xMoneyButtonText = new Text2('2X MONEY (' + doubleMoneyLevelsLeft + ')', { size: 35, fill: '#FFFFFF' }); use2xMoneyButtonText.anchor.set(0.5, 0.5); use2xMoneyButtonText.x = 1024; use2xMoneyButtonText.y = 1500; game.addChild(use2xMoneyButtonText); sellUIElements.push(sellBackButton, sellBackButtonText, use2xMoneyButton, use2xMoneyButtonText); // Calculate total value var totalValue = 0; for (var i = 0; i < playerInventory.length; i++) { var fossilValue = fossilValues[playerInventory[i]]; if (doubleValueActive) { fossilValue *= 2; } totalValue += fossilValue; } var totalValueText = new Text2('Total Value: ' + totalValue + ' coins', { size: 50, fill: '#FFD700' }); totalValueText.anchor.set(0.5, 0.5); totalValueText.x = 1024; totalValueText.y = 300; game.addChild(totalValueText); sellUIElements.push(totalValueText); sellAllButton.down = function () { playerCoins += totalValue; playerInventory = []; // Reset 2X VALUE effect after use if (doubleValueActive) { doubleValueActive = false; storage.doubleValueActive = doubleValueActive; } storage.playerCoins = playerCoins; storage.playerInventory = playerInventory; hideSell(); }; use2xMoneyButton.down = function () { if (doubleMoneyLevelsLeft > 0) { // Activate 2X MONEY effect for selling doubleValueActive = true; storage.doubleValueActive = doubleValueActive; // Update button text to show remaining uses use2xMoneyButtonText.setText('2X MONEY (' + doubleMoneyLevelsLeft + ')'); // Recalculate and update total value display var newTotalValue = 0; for (var i = 0; i < playerInventory.length; i++) { var fossilValue = fossilValues[playerInventory[i]]; if (doubleValueActive) { fossilValue *= 2; } newTotalValue += fossilValue; } totalValueText.setText('Total Value: ' + newTotalValue + ' coins'); } }; sellBackButton.down = function () { hideSell(); }; } function hideSell() { gameState = 'nickname'; // Remove all sell UI elements hideAllSellUI(); // Restore menu UI elements showAllMenuUI(); coinsText.setText('Coins: ' + playerCoins); } function showShop() { gameState = 'shop'; // Hide all menu and game UI elements hideAllMenuUI(); hideAllGameUI(); // Create shop display var shopTitle = new Text2('POWER-UP SHOP', { size: 80, fill: '#FFFFFF' }); shopTitle.anchor.set(0.5, 0.5); shopTitle.x = 1024; shopTitle.y = 200; game.addChild(shopTitle); storeUIElements.push(shopTitle); // XRAY Power-up var xrayButton = game.attachAsset('purchaseButton', { anchorX: 0.5, anchorY: 0.5 }); xrayButton.x = 1024; xrayButton.y = 400; var xrayText = new Text2('XRAY - 500 Coins\nReveals all fossils for 1 level', { size: 35, fill: '#FFFFFF' }); xrayText.anchor.set(0.5, 0.5); xrayText.x = 1024; xrayText.y = 400; // 2X MONEY Power-up var doubleMoneyButton = game.attachAsset('purchaseButton', { anchorX: 0.5, anchorY: 0.5 }); doubleMoneyButton.x = 1024; doubleMoneyButton.y = 550; var doubleMoneyText = new Text2('2X MONEY - 10000 Coins\nDouble money for 20 levels', { size: 35, fill: '#FFFFFF' }); doubleMoneyText.anchor.set(0.5, 0.5); doubleMoneyText.x = 1024; doubleMoneyText.y = 550; // 2X VALUE Power-up var doubleValueButton = game.attachAsset('purchaseButton', { anchorX: 0.5, anchorY: 0.5 }); doubleValueButton.x = 1024; doubleValueButton.y = 700; var doubleValueText = new Text2('2X LUCK - 1250 Coins\nDouble egg chances', { size: 35, fill: '#FFFFFF' }); doubleValueText.anchor.set(0.5, 0.5); doubleValueText.x = 1024; doubleValueText.y = 700; // +1 SELECT Pass Power-up var passButton = game.attachAsset('purchaseButton', { anchorX: 0.5, anchorY: 0.5 }); passButton.x = 1024; passButton.y = 850; var currentPassPurchases = storage.passPurchases || 0; var passText = new Text2('+1 SELECT - 50000 Coins\nAdd 1 extra selection slot (' + currentPassPurchases + '/4)', { size: 35, fill: '#FFFFFF' }); passText.anchor.set(0.5, 0.5); passText.x = 1024; passText.y = 850; // Common Egg var commonEggButton = game.attachAsset('purchaseButton', { anchorX: 0.5, anchorY: 0.5 }); commonEggButton.x = 1024; commonEggButton.y = 1400; var commonEggText = new Text2('Sıradan Yumurta - 500 Coins\nCommon fossil guaranteed', { size: 35, fill: '#FFFFFF' }); commonEggText.anchor.set(0.5, 0.5); commonEggText.x = 1024; commonEggText.y = 1400; // Common Egg Info Button var commonEggInfoButton = new Text2('❗', { size: 60, fill: '#FFD700' }); commonEggInfoButton.anchor.set(0.5, 0.5); commonEggInfoButton.x = 1350; commonEggInfoButton.y = 1400; game.addChild(commonEggInfoButton); // Rare Egg var rareEggButton = game.attachAsset('purchaseButton', { anchorX: 0.5, anchorY: 0.5 }); rareEggButton.x = 1024; rareEggButton.y = 1550; var rareEggText = new Text2('Nadir Yumurta - 2000 Coins\nRare fossil guaranteed', { size: 35, fill: '#FFD700' }); rareEggText.anchor.set(0.5, 0.5); rareEggText.x = 1024; rareEggText.y = 1550; // Rare Egg Info Button var rareEggInfoButton = new Text2('❗', { size: 60, fill: '#FFD700' }); rareEggInfoButton.anchor.set(0.5, 0.5); rareEggInfoButton.x = 1350; rareEggInfoButton.y = 1550; game.addChild(rareEggInfoButton); // Legendary Egg var legendaryEggButton = game.attachAsset('purchaseButton', { anchorX: 0.5, anchorY: 0.5 }); legendaryEggButton.x = 1024; legendaryEggButton.y = 1700; var legendaryEggText = new Text2('Destansı - 10000 Coins\nLegendary guaranteed', { size: 35, fill: '#FF69B4' }); legendaryEggText.anchor.set(0.5, 0.5); legendaryEggText.x = 1024; legendaryEggText.y = 1700; // Legendary Egg Info Button var legendaryEggInfoButton = new Text2('❗', { size: 60, fill: '#FFD700' }); legendaryEggInfoButton.anchor.set(0.5, 0.5); legendaryEggInfoButton.x = 1350; legendaryEggInfoButton.y = 1700; game.addChild(legendaryEggInfoButton); // Back button var shopBackButton = game.attachAsset('startButton', { anchorX: 0.5, anchorY: 0.5 }); shopBackButton.x = 1024; shopBackButton.y = 1200; var shopBackButtonText = new Text2('BACK', { size: 35, fill: '#FFFFFF' }); shopBackButtonText.anchor.set(0.5, 0.5); shopBackButtonText.x = 1024; shopBackButtonText.y = 1200; game.addChild(xrayText); game.addChild(doubleMoneyText); game.addChild(doubleValueText); game.addChild(commonEggText); game.addChild(rareEggText); game.addChild(legendaryEggText); game.addChild(shopBackButtonText); game.addChild(passText); storeUIElements.push(xrayButton, xrayText, doubleMoneyButton, doubleMoneyText, doubleValueButton, doubleValueText, passButton, passText, commonEggButton, commonEggText, commonEggInfoButton, rareEggButton, rareEggText, rareEggInfoButton, legendaryEggButton, legendaryEggText, legendaryEggInfoButton, shopBackButton, shopBackButtonText); // Purchase handlers xrayButton.down = function () { if (playerCoins >= 500) { playerCoins -= 500; storage.playerCoins = playerCoins; xrayLevelsLeft++; storage.xrayLevelsLeft = xrayLevelsLeft; hideShop(); } }; doubleMoneyButton.down = function () { if (playerCoins >= 10000) { playerCoins -= 10000; storage.playerCoins = playerCoins; doubleMoneyLevelsLeft += 20; storage.doubleMoneyLevelsLeft = doubleMoneyLevelsLeft; hideShop(); } }; doubleValueButton.down = function () { if (playerCoins >= 1250) { playerCoins -= 1250; storage.playerCoins = playerCoins; doubleSpawnChanceActive = true; storage.doubleSpawnChanceActive = doubleSpawnChanceActive; hideShop(); } }; passButton.down = function () { var passPurchases = storage.passPurchases || 0; if (playerCoins >= 50000 && passPurchases < 4) { playerCoins -= 50000; storage.playerCoins = playerCoins; passPurchases++; storage.passPurchases = passPurchases; hideShop(); } }; // Common egg info handler commonEggInfoButton.down = function () { showCommonEggInfo(); }; // Egg purchase handlers commonEggButton.down = function () { if (playerCoins >= 500) { playerCoins -= 500; storage.playerCoins = playerCoins; // Open common egg and get dinosaur var dinosaurName = openEgg('common'); } }; // Rare egg info handler rareEggInfoButton.down = function () { showRareEggInfo(); }; rareEggButton.down = function () { if (playerCoins >= 2000) { playerCoins -= 2000; storage.playerCoins = playerCoins; // Open rare egg and get dinosaur var dinosaurName = openEgg('rare'); } }; // Legendary egg info handler legendaryEggInfoButton.down = function () { showLegendaryEggInfo(); }; legendaryEggButton.down = function () { if (playerCoins >= 10000) { playerCoins -= 10000; storage.playerCoins = playerCoins; // Open legendary egg and get dinosaur var dinosaurName = openEgg('legendary'); } }; shopBackButton.down = function () { hideShop(); }; } function hideShop() { gameState = 'nickname'; // Remove all shop UI elements hideAllStoreUI(); // Restore menu UI elements showAllMenuUI(); coinsText.setText('Coins: ' + playerCoins); } function showBag() { gameState = 'bag'; // Hide all menu and game UI elements hideAllMenuUI(); hideAllGameUI(); // Create bag display var bagTitle = new Text2('DINOSAUR BAG', { size: 80, fill: '#FFFFFF' }); bagTitle.anchor.set(0.5, 0.5); bagTitle.x = 1024; bagTitle.y = 200; game.addChild(bagTitle); bagUIElements.push(bagTitle); // Calculate vomit limit (1 base + pass purchases) var passPurchases = storage.passPurchases || 0; var maxVomitSlots = 1 + passPurchases; var baseSlots = 1; var passSlots = storage.passPurchases || 0; var vomitText = new Text2('Select Slots: ' + maxVomitSlots + ' available (Base: ' + baseSlots + ' + Pass: ' + passSlots + ')', { size: 35, fill: '#FFD700' }); vomitText.anchor.set(0.5, 0.5); vomitText.x = 1024; vomitText.y = 280; game.addChild(vomitText); bagUIElements.push(vomitText); // Get selected dinosaurs var selectedDinosaurs = []; if (storage.selectedDinosaurs && Array.isArray(storage.selectedDinosaurs)) { selectedDinosaurs = storage.selectedDinosaurs; } else if (selectedDinosaur) { selectedDinosaurs = [selectedDinosaur]; } // Show selected dinosaurs at bottom center with large upgrade system if (selectedDinosaurs.length > 0) { // Create large upgrade panel background var upgradePanel = game.attachAsset('upgradePanel', { anchorX: 0.5, anchorY: 0.5 }); upgradePanel.x = 1024; upgradePanel.y = 2200; bagUIElements.push(upgradePanel); var selectedTitle = new Text2('GELİŞTİRME SİSTEMİ', { size: 80, fill: '#FFD700' }); selectedTitle.anchor.set(0.5, 0.5); selectedTitle.x = 1024; selectedTitle.y = 1400; game.addChild(selectedTitle); bagUIElements.push(selectedTitle); for (var s = 0; s < selectedDinosaurs.length; s++) { var selectedDino = selectedDinosaurs[s]; var rarity = dinosaurRarities[selectedDino]; initializeDinosaurUpgrades(selectedDino); var dinoUpgrades = dinosaurUpgrades[selectedDino]; var maxUpgrades = 3; // Create dinosaur image with red eyes var dinoImage = new DinosaurImage(selectedDino); dinoImage.x = 300 + s * 700; dinoImage.y = 1600; dinoImage.scaleX = 1.5; dinoImage.scaleY = 1.5; game.addChild(dinoImage); bagUIElements.push(dinoImage); // Color for dinosaur name var dinoColor = '#87CEEB'; // Light blue for common if (rarity === 'legendary') dinoColor = '#FF0000'; // Red for legendary else if (rarity === 'rare') dinoColor = '#800080'; // Purple for rare else if (rarity === 'common') dinoColor = '#00008B'; // Dark blue for common else if (rarity === 'chromatic') dinoColor = getRandomColor(); // Rainbow for chromatic var dinoDisplayText = selectedDino; var selectedDinoText = new Text2(dinoDisplayText, { size: 50, fill: dinoColor }); selectedDinoText.anchor.set(0.5, 0.5); selectedDinoText.x = 300 + s * 700; selectedDinoText.y = 1800; game.addChild(selectedDinoText); bagUIElements.push(selectedDinoText); var rarityText = new Text2('(' + rarity + ')', { size: 35, fill: dinoColor }); rarityText.anchor.set(0.5, 0.5); rarityText.x = 300 + s * 700; rarityText.y = 1850; game.addChild(rarityText); bagUIElements.push(rarityText); // Show all 3 upgrades for this dinosaur with larger buttons var upgradeNames = ['HIZLI KAZMA', 'EK KULLANIM', 'BONUS PUAN']; var upgradeDescriptions = ['%15 daha hızlı kazma', '+1 kullanım/fosil', '%20 daha fazla puan']; var upgradeKeys = ['upgrade1', 'upgrade2', 'upgrade3']; for (var u = 0; u < 3; u++) { var currentUpgrade = dinoUpgrades[upgradeKeys[u]]; var upgradeCost = dinosaurUpgradeCosts[rarity]; // Large upgrade button var upgradeButton = game.attachAsset('upgradeButton', { anchorX: 0.5, anchorY: 0.5 }); upgradeButton.x = 300 + s * 700; upgradeButton.y = 1950 + u * 150; bagUIElements.push(upgradeButton); // Upgrade title var upgradeTitle = new Text2(upgradeNames[u], { size: 55, fill: '#FFFFFF' }); upgradeTitle.anchor.set(0.5, 0.5); upgradeTitle.x = 300 + s * 700; upgradeTitle.y = 1920 + u * 150; game.addChild(upgradeTitle); bagUIElements.push(upgradeTitle); // Upgrade description var upgradeDesc = new Text2(upgradeDescriptions[u], { size: 40, fill: '#CCCCCC' }); upgradeDesc.anchor.set(0.5, 0.5); upgradeDesc.x = 300 + s * 700; upgradeDesc.y = 1950 + u * 150; game.addChild(upgradeDesc); bagUIElements.push(upgradeDesc); // Upgrade level and cost var upgradeInfo = new Text2('Seviye: ' + currentUpgrade + '/' + maxUpgrades + '\nMaliyet: ' + upgradeCost + ' coin', { size: 45, fill: currentUpgrade >= maxUpgrades ? '#FFD700' : '#FFFFFF' }); upgradeInfo.anchor.set(0.5, 0.5); upgradeInfo.x = 300 + s * 700; upgradeInfo.y = 1980 + u * 150; game.addChild(upgradeInfo); bagUIElements.push(upgradeInfo); // Add upgrade button functionality if not max level if (currentUpgrade < maxUpgrades) { // Create closure for upgrade purchase (function (dinosaurName, cost, upgradeKey) { upgradeButton.down = function () { if (playerCoins >= cost) { playerCoins -= cost; storage.playerCoins = playerCoins; initializeDinosaurUpgrades(dinosaurName); dinosaurUpgrades[dinosaurName][upgradeKey]++; storage.dinosaurUpgrades = dinosaurUpgrades; hideBag(); showBag(); // Refresh display } }; })(selectedDino, upgradeCost, upgradeKeys[u]); } else { // Max level - show as disabled upgradeButton.alpha = 0.5; var maxText = new Text2('MAKSİMUM SEVİYE', { size: 40, fill: '#FFD700' }); maxText.anchor.set(0.5, 0.5); maxText.x = 300 + s * 700; maxText.y = 2010 + u * 150; game.addChild(maxText); bagUIElements.push(maxText); } } } } // Sort dinosaurs by rarity var chromaticDinos = []; var legendaryDinos = []; var rareDinos = []; var commonDinos = []; for (var i = 0; i < dinosaurCollection.length; i++) { var dino = dinosaurCollection[i]; var rarity = dinosaurRarities[dino]; if (rarity === 'chromatic') { chromaticDinos.push(dino); } else if (rarity === 'legendary') { legendaryDinos.push(dino); } else if (rarity === 'rare') { rareDinos.push(dino); } else { commonDinos.push(dino); } } var allDinos = chromaticDinos.concat(legendaryDinos).concat(rareDinos).concat(commonDinos); // Reorder dinosaurs to show selected ones at the bottom var unselectedDinos = []; var selectedDinosForDisplay = []; for (var k = 0; k < allDinos.length; k++) { if (selectedDinosaurs.indexOf(allDinos[k]) !== -1) { selectedDinosForDisplay.push(allDinos[k]); } else { unselectedDinos.push(allDinos[k]); } } var orderedDinos = unselectedDinos.concat(selectedDinosForDisplay); // Display all dinosaurs - unlimited storage, but limited vomit selection var startY = 350; for (var j = 0; j < orderedDinos.length; j++) { var dinoName = orderedDinos[j]; var rarity = dinosaurRarities[dinoName]; var color = '#87CEEB'; // Light blue for common/regular dinosaurs if (rarity === 'chromatic') color = getRandomColor(); // Rainbow for chromatic else if (rarity === 'legendary') color = '#FF0000'; // Red for legendary else if (rarity === 'rare') color = '#800080'; // Purple for rare else if (rarity === 'common') color = '#00008B'; // Dark blue for common var isSelected = selectedDinosaurs.indexOf(dinoName) !== -1; var displayText = dinoName + ' (' + rarity + ')' + (isSelected ? ' [SELECTED]' : ''); var dinoButton = game.attachAsset('startButton', { anchorX: 0.5, anchorY: 0.5 }); dinoButton.x = 1024; dinoButton.y = startY + j * 80; // Add dinosaur image var dinoImage = new DinosaurImage(dinoName); dinoImage.x = 700; dinoImage.y = startY + j * 80; dinoImage.scaleX = 0.8; dinoImage.scaleY = 0.8; game.addChild(dinoImage); bagUIElements.push(dinoImage); var dinoText = new Text2(displayText, { size: 35, fill: isSelected ? '#000000' : color }); dinoText.anchor.set(0.5, 0.5); dinoText.x = 1024; dinoText.y = startY + j * 80; game.addChild(dinoText); bagUIElements.push(dinoButton, dinoText); // Create closure for selection - check vomit limit (function (dinosaurName) { dinoButton.down = function () { var currentIndex = selectedDinosaurs.indexOf(dinosaurName); if (currentIndex !== -1) { // Remove from selection selectedDinosaurs.splice(currentIndex, 1); } else { // Check if player can select dinosaurs - everyone gets 1 base slot, passes add more var passPurchases = storage.passPurchases || 0; // If at selection limit, replace the first selected dinosaur if (selectedDinosaurs.length >= maxVomitSlots) { selectedDinosaurs.shift(); // Remove first selected dinosaur } selectedDinosaurs.push(dinosaurName); // Add new selection } // Update storage and backward compatibility storage.selectedDinosaurs = selectedDinosaurs; if (selectedDinosaurs.length > 0) { selectedDinosaur = selectedDinosaurs[0]; // Keep backward compatibility storage.selectedDinosaur = selectedDinosaur; } else { selectedDinosaur = null; storage.selectedDinosaur = null; } hideBag(); showBag(); // Refresh to show selected at bottom }; })(dinoName); } // Back button // Delete button var deleteButton = game.attachAsset('deleteButton', { anchorX: 0.5, anchorY: 0.5 }); deleteButton.x = 700; deleteButton.y = 1500; var deleteButtonText = new Text2('DELETE', { size: 35, fill: '#FFFFFF' }); deleteButtonText.anchor.set(0.5, 0.5); deleteButtonText.x = 700; deleteButtonText.y = 1500; game.addChild(deleteButtonText); bagUIElements.push(deleteButton, deleteButtonText); var bagBackButton = game.attachAsset('startButton', { anchorX: 0.5, anchorY: 0.5 }); bagBackButton.x = 1348; bagBackButton.y = 1500; var bagBackButtonText = new Text2('BACK', { size: 35, fill: '#FFFFFF' }); bagBackButtonText.anchor.set(0.5, 0.5); bagBackButtonText.x = 1348; bagBackButtonText.y = 1500; game.addChild(bagBackButtonText); bagUIElements.push(bagBackButton, bagBackButtonText); // Delete button handler deleteButton.down = function () { showDeleteMode(); }; bagBackButton.down = function () { hideBag(); }; } function showDeleteMode() { gameState = 'deleteMode'; // Hide current bag UI hideAllBagUI(); // Create delete mode display var deleteTitle = new Text2('DELETE DINOSAURS', { size: 80, fill: '#FF4444' }); deleteTitle.anchor.set(0.5, 0.5); deleteTitle.x = 1024; deleteTitle.y = 200; game.addChild(deleteTitle); bagUIElements.push(deleteTitle); var deleteInstructionText = new Text2('Select dinosaurs to delete:', { size: 50, fill: '#FFFFFF' }); deleteInstructionText.anchor.set(0.5, 0.5); deleteInstructionText.x = 1024; deleteInstructionText.y = 280; game.addChild(deleteInstructionText); bagUIElements.push(deleteInstructionText); // Sort dinosaurs by rarity for display var legendaryDinos = []; var rareDinos = []; var commonDinos = []; for (var i = 0; i < dinosaurCollection.length; i++) { var dino = dinosaurCollection[i]; var rarity = dinosaurRarities[dino]; if (rarity === 'legendary') { legendaryDinos.push(dino); } else if (rarity === 'rare') { rareDinos.push(dino); } else { commonDinos.push(dino); } } var allDinos = legendaryDinos.concat(rareDinos).concat(commonDinos); // Track selected dinosaurs for deletion var selectedForDeletion = []; // Display all dinosaurs with delete option var startY = 350; for (var j = 0; j < allDinos.length; j++) { var dinoName = allDinos[j]; var rarity = dinosaurRarities[dinoName]; var color = '#87CEEB'; // Light blue for common/regular dinosaurs if (rarity === 'legendary') color = '#FF0000'; // Red for legendary else if (rarity === 'rare') color = '#800080'; // Purple for rare else if (rarity === 'common') color = '#00008B'; // Dark blue for common var isSelectedForDeletion = selectedForDeletion.indexOf(dinoName) !== -1; var displayText = dinoName + ' (' + rarity + ')' + (isSelectedForDeletion ? ' [TO DELETE]' : ''); var dinoButton = game.attachAsset('startButton', { anchorX: 0.5, anchorY: 0.5 }); dinoButton.x = 1024; dinoButton.y = startY + j * 80; var dinoText = new Text2(displayText, { size: 35, fill: isSelectedForDeletion ? '#FF4444' : color }); dinoText.anchor.set(0.5, 0.5); dinoText.x = 1024; dinoText.y = startY + j * 80; game.addChild(dinoText); bagUIElements.push(dinoButton, dinoText); // Create closure for selection toggle (function (dinosaurName, textElement) { dinoButton.down = function () { var index = selectedForDeletion.indexOf(dinosaurName); if (index === -1) { // Add to deletion list selectedForDeletion.push(dinosaurName); textElement.setText(dinosaurName + ' (' + dinosaurRarities[dinosaurName] + ') [TO DELETE]'); textElement.fill = '#FF4444'; } else { // Remove from deletion list selectedForDeletion.splice(index, 1); var rarity = dinosaurRarities[dinosaurName]; var color = '#87CEEB'; // Light blue for common/regular dinosaurs if (rarity === 'legendary') color = '#FF0000'; // Red for legendary else if (rarity === 'rare') color = '#800080'; // Purple for rare else if (rarity === 'common') color = '#00008B'; // Dark blue for common textElement.setText(dinosaurName + ' (' + rarity + ')'); textElement.fill = color; } }; })(dinoName, dinoText); } // Confirm delete button var confirmDeleteButton = game.attachAsset('deleteButton', { anchorX: 0.5, anchorY: 0.5 }); confirmDeleteButton.x = 700; confirmDeleteButton.y = 1500; var confirmDeleteText = new Text2('CONFIRM DELETE', { size: 30, fill: '#FFFFFF' }); confirmDeleteText.anchor.set(0.5, 0.5); confirmDeleteText.x = 700; confirmDeleteText.y = 1500; game.addChild(confirmDeleteText); bagUIElements.push(confirmDeleteButton, confirmDeleteText); // Cancel delete button var cancelDeleteButton = game.attachAsset('startButton', { anchorX: 0.5, anchorY: 0.5 }); cancelDeleteButton.x = 1348; cancelDeleteButton.y = 1500; var cancelDeleteText = new Text2('CANCEL', { size: 35, fill: '#FFFFFF' }); cancelDeleteText.anchor.set(0.5, 0.5); cancelDeleteText.x = 1348; cancelDeleteText.y = 1500; game.addChild(cancelDeleteText); bagUIElements.push(cancelDeleteButton, cancelDeleteText); // Event handlers confirmDeleteButton.down = function () { // Remove selected dinosaurs from collection for (var i = 0; i < selectedForDeletion.length; i++) { var dinoToDelete = selectedForDeletion[i]; var index = dinosaurCollection.indexOf(dinoToDelete); if (index !== -1) { dinosaurCollection.splice(index, 1); // If deleted dinosaur was selected, clear selection if (selectedDinosaur === dinoToDelete) { selectedDinosaur = null; storage.selectedDinosaur = null; } } } // Save updated collection storage.dinosaurCollection = dinosaurCollection; // Return to bag view hideAllBagUI(); showBag(); }; cancelDeleteButton.down = function () { // Return to bag view without deleting hideAllBagUI(); showBag(); }; } function hideBag() { gameState = 'nickname'; // Remove all bag UI elements hideAllBagUI(); // Restore menu UI elements showAllMenuUI(); } function showCommonEggInfo() { gameState = 'commonEggInfo'; // Hide all shop UI elements hideAllStoreUI(); // Create info display var infoTitle = new Text2('SIRADAN YUMURTA İÇERİĞİ', { size: 60, fill: '#FFFFFF' }); infoTitle.anchor.set(0.5, 0.5); infoTitle.x = 1024; infoTitle.y = 200; game.addChild(infoTitle); infoUIElements.push(infoTitle); var infoText = 'PARASOUROLUPHUS - %33.33\n'; infoText += 'Yavaş kazma (1 saniye gecikme)\n\n'; infoText += 'PYTHEREDON - %33.33\n'; infoText += 'Seviye başı sadece 1 fosil alır\n\n'; infoText += 'DIMETRODON - %33.33\n'; infoText += 'Nadirlık fark etmez 2 fosil alır'; var infoDisplay = new Text2(infoText, { size: 40, fill: '#FFFFFF' }); infoDisplay.anchor.set(0.5, 0.5); infoDisplay.x = 1024; infoDisplay.y = 600; game.addChild(infoDisplay); infoUIElements.push(infoDisplay); var backButton = game.attachAsset('startButton', { anchorX: 0.5, anchorY: 0.5 }); backButton.x = 1024; backButton.y = 1200; var backButtonText = new Text2('BACK', { size: 35, fill: '#FFFFFF' }); backButtonText.anchor.set(0.5, 0.5); backButtonText.x = 1024; backButtonText.y = 1200; game.addChild(backButtonText); infoUIElements.push(backButton, backButtonText); backButton.down = function () { hideInfoScreen(); showShop(); }; } function showRareEggInfo() { gameState = 'rareEggInfo'; // Hide all shop UI elements hideAllStoreUI(); // Create info display var infoTitle = new Text2('NADİR YUMURTA İÇERİĞİ', { size: 60, fill: '#FFFFFF' }); infoTitle.anchor.set(0.5, 0.5); infoTitle.x = 1024; infoTitle.y = 200; game.addChild(infoTitle); infoUIElements.push(infoTitle); var infoText = 'BARYONYX - %45\n'; infoText += '0.2x daha hızlı kaya kazma\n\n'; infoText += 'ALLO - %35\n'; infoText += '0.4x daha hızlı kaya kazma\n\n'; infoText += 'YUTY - %20\n'; infoText += '0.7x daha hızlı kaya kazma'; var infoDisplay = new Text2(infoText, { size: 40, fill: '#FFFFFF' }); infoDisplay.anchor.set(0.5, 0.5); infoDisplay.x = 1024; infoDisplay.y = 600; game.addChild(infoDisplay); infoUIElements.push(infoDisplay); var backButton = game.attachAsset('startButton', { anchorX: 0.5, anchorY: 0.5 }); backButton.x = 1024; backButton.y = 1200; var backButtonText = new Text2('BACK', { size: 35, fill: '#FFFFFF' }); backButtonText.anchor.set(0.5, 0.5); backButtonText.x = 1024; backButtonText.y = 1200; game.addChild(backButtonText); infoUIElements.push(backButton, backButtonText); backButton.down = function () { hideInfoScreen(); showShop(); }; } function showLegendaryEggInfo() { gameState = 'legendaryEggInfo'; // Hide all shop UI elements hideAllStoreUI(); // Create info display var infoTitle = new Text2('DESTANSI YUMURTA İÇERİĞİ', { size: 60, fill: '#FFFFFF' }); infoTitle.anchor.set(0.5, 0.5); infoTitle.x = 1024; infoTitle.y = 200; game.addChild(infoTitle); infoUIElements.push(infoTitle); var infoText = 'TREX - %3 (Chromatic)\n'; infoText += '??? ??? ???\n\n'; infoText += 'SPINO - %10\n'; infoText += '?\n\n'; infoText += 'GIGA - %15\n'; infoText += '?\n\n'; infoText += 'Mutasyonlu BARYONYX - %25\n'; infoText += '?\n\n'; infoText += 'Mutasyonlu DIMETRODON - %17\n'; infoText += '?\n\n'; infoText += 'Mutasyonlu PARASAUROLUPHUS - %30\n'; infoText += '?'; // Add animated color-changing question marks for TREX ability var trexQuestionMarks = []; for (var q = 0; q < 3; q++) { var questionMark = new Text2('?', { size: 40, fill: getRandomColor() }); questionMark.anchor.set(0.5, 0.5); questionMark.x = 950 + q * 40; questionMark.y = 450; game.addChild(questionMark); infoUIElements.push(questionMark); trexQuestionMarks.push(questionMark); } // Animate color changes for question marks var colorChangeTimer = LK.setInterval(function () { for (var i = 0; i < trexQuestionMarks.length; i++) { tween(trexQuestionMarks[i], { fill: getRandomColor() }, { duration: 500 }); } }, 600); // Store timer reference to clear it when hiding info screen infoUIElements.colorChangeTimer = colorChangeTimer; var infoDisplay = new Text2(infoText, { size: 30, fill: '#FFFFFF' }); infoDisplay.anchor.set(0.5, 0.5); infoDisplay.x = 1024; infoDisplay.y = 700; game.addChild(infoDisplay); infoUIElements.push(infoDisplay); var backButton = game.attachAsset('startButton', { anchorX: 0.5, anchorY: 0.5 }); backButton.x = 1024; backButton.y = 1200; var backButtonText = new Text2('BACK', { size: 35, fill: '#FFFFFF' }); backButtonText.anchor.set(0.5, 0.5); backButtonText.x = 1024; backButtonText.y = 1200; game.addChild(backButtonText); infoUIElements.push(backButton, backButtonText); backButton.down = function () { hideInfoScreen(); showShop(); }; } function getRandomColor() { var colors = ['#FF0000', '#FF7F00', '#FFFF00', '#00FF00', '#0000FF', '#4B0082', '#9400D3']; return colors[Math.floor(Math.random() * colors.length)]; } function hideInfoScreen() { // Clear color change timer if it exists if (infoUIElements.colorChangeTimer) { LK.clearInterval(infoUIElements.colorChangeTimer); infoUIElements.colorChangeTimer = null; } // Remove all info UI elements hideAllInfoUI(); } function hideAllGiftsUI() { for (var i = 0; i < giftsUIElements.length; i++) { giftsUIElements[i].destroy(); } giftsUIElements = []; } function hideAllTradeUI() { for (var i = 0; i < tradeUIElements.length; i++) { tradeUIElements[i].destroy(); } tradeUIElements = []; } function hideAllStockUI() { for (var i = 0; i < stockUIElements.length; i++) { stockUIElements[i].destroy(); } stockUIElements = []; } function checkDailyGift() { var currentDate = new Date(); var today = Math.floor(currentDate.getTime() / (1000 * 60 * 60 * 24)); // Days since epoch var lastDate = storage.lastGiftDate || 0; if (today > lastDate) { // New day - reset gift status only when it's actually a new day storage.dailyGiftClaimed = false; dailyGiftClaimed = false; // Check if it's been more than 1 day - reset streak if so if (today > lastDate + 1) { storage.currentGiftDay = 1; currentGiftDay = 1; } storage.lastGiftDate = today; lastGiftDate = today; } else { // Same day - load existing gift claimed status from storage dailyGiftClaimed = storage.dailyGiftClaimed || false; } } function checkDailyTrades() { var currentDate = new Date(); var today = Math.floor(currentDate.getTime() / (1000 * 60 * 60 * 24)); // Days since epoch var lastDate = storage.lastTradeDate || 0; if (today > lastDate) { // New day - reset trade count storage.dailyTradesLeft = 5; dailyTradesLeft = 5; storage.lastTradeDate = today; lastTradeDate = today; } } function canStartTrade() { checkDailyTrades(); return dailyTradesLeft > 0; } function createTradeOffer(targetPlayer, offeredDinosaurs) { if (!canStartTrade() || offeredDinosaurs.length > 4) { return false; } var tradeOffer = { fromPlayer: playerNickname, toPlayer: targetPlayer, offeredDinosaurs: offeredDinosaurs, requestedDinosaurs: [], status: 'pending' }; storage.currentTradeOffer = tradeOffer; currentTradeOffer = tradeOffer; return true; } function acceptTradeOffer(tradeOffer) { if (!canStartTrade()) { return false; } // Execute trade (mock implementation) dailyTradesLeft--; storage.dailyTradesLeft = dailyTradesLeft; // Clear current offer storage.currentTradeOffer = null; currentTradeOffer = null; return true; } function showGifts() { gameState = 'gifts'; checkDailyGift(); // Hide all menu and game UI elements hideAllMenuUI(); hideAllGameUI(); // Create gifts display var giftsTitle = new Text2('GÜNLÜK HEDİYELER', { size: 80, fill: '#FFFFFF' }); giftsTitle.anchor.set(0.5, 0.5); giftsTitle.x = 1024; giftsTitle.y = 200; game.addChild(giftsTitle); giftsUIElements.push(giftsTitle); // Show weekly gift calendar var weekText = new Text2('Haftalık Döngü - Gün ' + currentGiftDay + '/7', { size: 50, fill: '#FFD700' }); weekText.anchor.set(0.5, 0.5); weekText.x = 1024; weekText.y = 300; game.addChild(weekText); giftsUIElements.push(weekText); // Display all 7 days for (var day = 1; day <= 7; day++) { var dayButton = game.attachAsset('startButton', { anchorX: 0.5, anchorY: 0.5 }); dayButton.x = 200 + (day - 1) * 240; dayButton.y = 600; var isCurrentDay = day === currentGiftDay; var canClaim = isCurrentDay && !dailyGiftClaimed; var isPastDay = day < currentGiftDay; // Change button color based on status if (isPastDay) { dayButton.alpha = 0.5; // Already claimed } else if (canClaim) { dayButton.tint = 0x32CD32; // Green for claimable } else { dayButton.tint = 0x808080; // Gray for future days } var dayText = new Text2('Gün ' + day + '\n' + dailyGifts[day - 1] + ' Para', { size: 30, fill: canClaim ? '#000000' : '#FFFFFF' }); dayText.anchor.set(0.5, 0.5); dayText.x = 200 + (day - 1) * 240; dayText.y = 600; game.addChild(dayText); var statusText = new Text2(isPastDay ? 'ALındı' : canClaim ? 'AL!' : 'Bekliyor', { size: 25, fill: canClaim ? '#000000' : isPastDay ? '#FFD700' : '#CCCCCC' }); statusText.anchor.set(0.5, 0.5); statusText.x = 200 + (day - 1) * 240; statusText.y = 650; game.addChild(statusText); giftsUIElements.push(dayButton, dayText, statusText); // Add click handler for current day if (canClaim) { (function (giftAmount, dayNum) { dayButton.down = function () { // Claim gift playerCoins += giftAmount; storage.playerCoins = playerCoins; // Mark gift as claimed and save to storage immediately dailyGiftClaimed = true; storage.dailyGiftClaimed = true; // Move to next day, reset to 1 after day 7 if (dayNum >= 7) { storage.currentGiftDay = 1; } else { storage.currentGiftDay = dayNum + 1; } currentGiftDay = storage.currentGiftDay; // Refresh gifts display hideGifts(); showGifts(); }; })(dailyGifts[day - 1], day); } } // Back button var giftsBackButton = game.attachAsset('startButton', { anchorX: 0.5, anchorY: 0.5 }); giftsBackButton.x = 1024; giftsBackButton.y = 1500; var giftsBackButtonText = new Text2('BACK', { size: 35, fill: '#FFFFFF' }); giftsBackButtonText.anchor.set(0.5, 0.5); giftsBackButtonText.x = 1024; giftsBackButtonText.y = 1500; game.addChild(giftsBackButtonText); giftsUIElements.push(giftsBackButton, giftsBackButtonText); giftsBackButton.down = function () { hideGifts(); }; } function hideGifts() { gameState = 'nickname'; // Remove all gifts UI elements hideAllGiftsUI(); // Restore menu UI elements showAllMenuUI(); coinsText.setText('Coins: ' + playerCoins); } function showTrade() { gameState = 'trade'; // Hide all menu and game UI elements hideAllMenuUI(); hideAllGameUI(); // Create trade display var tradeTitle = new Text2('TİCARET SİSTEMİ', { size: 80, fill: '#FFFFFF' }); tradeTitle.anchor.set(0.5, 0.5); tradeTitle.x = 1024; tradeTitle.y = 200; game.addChild(tradeTitle); tradeUIElements.push(tradeTitle); // Coming soon message var comingSoonText = new Text2('YAKINDA GELİYOR', { size: 80, fill: '#FFD700' }); comingSoonText.anchor.set(0.5, 0.5); comingSoonText.x = 1024; comingSoonText.y = 600; game.addChild(comingSoonText); tradeUIElements.push(comingSoonText); var comingSoonDesc = new Text2('Takas sistemi çok yakında aktif olacak!\nDaha fazla özellik için beklemede kalın.', { size: 50, fill: '#FFFFFF' }); comingSoonDesc.anchor.set(0.5, 0.5); comingSoonDesc.x = 1024; comingSoonDesc.y = 800; game.addChild(comingSoonDesc); tradeUIElements.push(comingSoonDesc); // Back button var tradeBackButton = game.attachAsset('startButton', { anchorX: 0.5, anchorY: 0.5 }); tradeBackButton.x = 1024; tradeBackButton.y = 1500; var tradeBackButtonText = new Text2('BACK', { size: 35, fill: '#FFFFFF' }); tradeBackButtonText.anchor.set(0.5, 0.5); tradeBackButtonText.x = 1024; tradeBackButtonText.y = 1500; game.addChild(tradeBackButtonText); tradeUIElements.push(tradeBackButton, tradeBackButtonText); tradeBackButton.down = function () { hideTrade(); }; } function showTradeSetup(targetPlayer) { gameState = 'tradeSetup'; // Hide current trade UI hideAllTradeUI(); // Create trade setup display var setupTitle = new Text2('TAKAS KURULUMU: ' + targetPlayer, { size: 70, fill: '#FFFFFF' }); setupTitle.anchor.set(0.5, 0.5); setupTitle.x = 1024; setupTitle.y = 200; game.addChild(setupTitle); tradeUIElements.push(setupTitle); var instructionText = new Text2('En fazla 4 dinozor seçebilirsiniz', { size: 50, fill: '#FFD700' }); instructionText.anchor.set(0.5, 0.5); instructionText.x = 1024; instructionText.y = 280; game.addChild(instructionText); tradeUIElements.push(instructionText); // Track selected dinosaurs for trade var selectedForTrade = []; // Display available dinosaurs var startY = 400; for (var i = 0; i < dinosaurCollection.length; i++) { var dinoName = dinosaurCollection[i]; var rarity = dinosaurRarities[dinoName]; var color = '#87CEEB'; if (rarity === 'chromatic') color = getRandomColor();else if (rarity === 'legendary') color = '#FF0000';else if (rarity === 'rare') color = '#800080';else if (rarity === 'common') color = '#00008B'; var isSelected = selectedForTrade.indexOf(dinoName) !== -1; var displayText = dinoName + ' (' + rarity + ')' + (isSelected ? ' [SEÇİLDİ]' : ''); var dinoButton = game.attachAsset('startButton', { anchorX: 0.5, anchorY: 0.5 }); dinoButton.x = 1024; dinoButton.y = startY + i * 80; var dinoText = new Text2(displayText, { size: 35, fill: isSelected ? '#32CD32' : color }); dinoText.anchor.set(0.5, 0.5); dinoText.x = 1024; dinoText.y = startY + i * 80; game.addChild(dinoText); tradeUIElements.push(dinoButton, dinoText); // Create closure for selection (function (dinosaurName, textElement) { dinoButton.down = function () { var index = selectedForTrade.indexOf(dinosaurName); if (index === -1) { // Add to selection if under limit if (selectedForTrade.length < 4) { selectedForTrade.push(dinosaurName); textElement.setText(dinosaurName + ' (' + dinosaurRarities[dinosaurName] + ') [SEÇİLDİ]'); textElement.fill = '#32CD32'; } } else { // Remove from selection selectedForTrade.splice(index, 1); var rarity = dinosaurRarities[dinosaurName]; var color = '#87CEEB'; if (rarity === 'chromatic') color = getRandomColor();else if (rarity === 'legendary') color = '#FF0000';else if (rarity === 'rare') color = '#800080';else if (rarity === 'common') color = '#00008B'; textElement.setText(dinosaurName + ' (' + rarity + ')'); textElement.fill = color; } }; })(dinoName, dinoText); } // Send trade request button var sendRequestButton = game.attachAsset('purchaseButton', { anchorX: 0.5, anchorY: 0.5 }); sendRequestButton.x = 700; sendRequestButton.y = 1500; var sendRequestText = new Text2('TAKAS İSTEĞİ GÖNDER', { size: 30, fill: '#FFFFFF' }); sendRequestText.anchor.set(0.5, 0.5); sendRequestText.x = 700; sendRequestText.y = 1500; game.addChild(sendRequestText); tradeUIElements.push(sendRequestButton, sendRequestText); sendRequestButton.down = function () { if (selectedForTrade.length > 0) { createTradeOffer(targetPlayer, selectedForTrade); hideTrade(); showTrade(); // Return to main trade screen } }; // Back button var setupBackButton = game.attachAsset('startButton', { anchorX: 0.5, anchorY: 0.5 }); setupBackButton.x = 1348; setupBackButton.y = 1500; var setupBackText = new Text2('GERİ', { size: 35, fill: '#FFFFFF' }); setupBackText.anchor.set(0.5, 0.5); setupBackText.x = 1348; setupBackText.y = 1500; game.addChild(setupBackText); tradeUIElements.push(setupBackButton, setupBackText); setupBackButton.down = function () { hideTrade(); showTrade(); // Return to main trade screen }; } function hideTrade() { gameState = 'nickname'; // Remove all trade UI elements hideAllTradeUI(); // Restore menu UI elements showAllMenuUI(); } function showStock() { gameState = 'stock'; // Hide all menu and game UI elements hideAllMenuUI(); hideAllGameUI(); // Create stock display var stockTitle = new Text2('DİNOZOR STOKU', { size: 80, fill: '#FFFFFF' }); stockTitle.anchor.set(0.5, 0.5); stockTitle.x = 1024; stockTitle.y = 200; game.addChild(stockTitle); stockUIElements.push(stockTitle); // Coming soon message var comingSoonText = new Text2('YAKINDA GELİYOR', { size: 80, fill: '#FFD700' }); comingSoonText.anchor.set(0.5, 0.5); comingSoonText.x = 1024; comingSoonText.y = 600; game.addChild(comingSoonText); stockUIElements.push(comingSoonText); var comingSoonDesc = new Text2('Stok sistemi çok yakında aktif olacak!\nDaha fazla özellik için beklemede kalın.', { size: 50, fill: '#FFFFFF' }); comingSoonDesc.anchor.set(0.5, 0.5); comingSoonDesc.x = 1024; comingSoonDesc.y = 800; game.addChild(comingSoonDesc); stockUIElements.push(comingSoonDesc); // Back button var stockBackButton = game.attachAsset('startButton', { anchorX: 0.5, anchorY: 0.5 }); stockBackButton.x = 1024; stockBackButton.y = 1500; var stockBackButtonText = new Text2('BACK', { size: 35, fill: '#FFFFFF' }); stockBackButtonText.anchor.set(0.5, 0.5); stockBackButtonText.x = 1024; stockBackButtonText.y = 1500; game.addChild(stockBackButtonText); stockUIElements.push(stockBackButton, stockBackButtonText); stockBackButton.down = function () { hideStock(); }; } function hideStock() { gameState = 'nickname'; // Remove all stock UI elements hideAllStockUI(); // Restore menu UI elements showAllMenuUI(); coinsText.setText('Coins: ' + playerCoins); } function startGame() { if (playerNickname.length === 0) { return; } storage.playerNickname = playerNickname; gameState = 'playing'; // Hide menu UI elements hideAllMenuUI(); // Show game UI elements timerText.visible = true; scoreText.visible = true; levelText.visible = true; // Show power-up purchase options purchaseOption1.visible = true; purchaseText1.visible = true; purchaseOption2.visible = true; purchaseText2.visible = true; purchaseOption3.visible = true; purchaseText3.visible = true; // Show XRAY use button xrayUseButton.visible = true; xrayUseText.visible = true; xrayUseText.setText('XRAY (' + xrayLevelsLeft + ')'); // Show back to menu button backToMenuButton.visible = true; backToMenuText.visible = true; // Show ability button abilityUseButton.visible = true; abilityUseText.visible = true; // Start from saved level or level 1 if no save exists startLevel(currentLevelNumber); } // Event handlers leftArrow.down = function (x, y, obj) { if (gameState !== 'nickname') { return; } currentLetterIndex = (currentLetterIndex - 1 + alphabet.length) % alphabet.length; updateNicknameDisplay(); }; rightArrow.down = function (x, y, obj) { if (gameState !== 'nickname') { return; } currentLetterIndex = (currentLetterIndex + 1) % alphabet.length; updateNicknameDisplay(); }; addButton.down = function (x, y, obj) { if (gameState !== 'nickname') { return; } // Add current letter to nickname if (playerNickname.length < 12) { playerNickname += alphabet[currentLetterIndex]; updateNicknameDisplay(); } }; startButton.down = function (x, y, obj) { if (gameState !== 'nickname') { return; } startGame(); }; deleteButton.down = function (x, y, obj) { if (gameState !== 'nickname') { return; } if (playerNickname.length > 0) { playerNickname = playerNickname.slice(0, -1); updateNicknameDisplay(); } }; storeButton.down = function (x, y, obj) { if (gameState !== 'nickname') { return; } showStore(); }; sellButton.down = function (x, y, obj) { if (gameState !== 'nickname') { return; } showSell(); }; shopButton.down = function (x, y, obj) { if (gameState !== 'nickname') { return; } showShop(); }; bagButton.down = function (x, y, obj) { if (gameState !== 'nickname') { return; } showBag(); }; tradeButton.down = function (x, y, obj) { if (gameState !== 'nickname') { return; } showTrade(); }; giftsButton.down = function (x, y, obj) { if (gameState !== 'nickname') { return; } showGifts(); }; stockButton.down = function (x, y, obj) { if (gameState !== 'nickname') { return; } showStock(); }; game.down = function (x, y, obj) { // Game down handler for playing state only }; // Game update loop game.update = function () { if (gameState === 'playing') { levelTimer++; timerText.setText('Time: ' + Math.floor(levelTimer / 60)); // Slowly decrease score over time to encourage speed if (levelTimer % 120 === 0 && LK.getScore() > 0) { // Every 2 seconds LK.setScore(Math.max(0, LK.getScore() - 1)); scoreText.setText('Score: ' + LK.getScore()); } } }; // Power-up purchase options (shown when game is playing) var purchaseOption1 = game.attachAsset('purchaseButton', { anchorX: 0.5, anchorY: 0.5 }); purchaseOption1.x = 1800; purchaseOption1.y = 400; purchaseOption1.visible = false; var purchaseText1 = new Text2('XRAY\n500 Coins', { size: 30, fill: '#FFFFFF' }); purchaseText1.anchor.set(0.5, 0.5); purchaseText1.x = 1800; purchaseText1.y = 400; purchaseText1.visible = false; game.addChild(purchaseText1); var purchaseOption2 = game.attachAsset('purchaseButton', { anchorX: 0.5, anchorY: 0.5 }); purchaseOption2.x = 1800; purchaseOption2.y = 520; purchaseOption2.visible = false; var purchaseText2 = new Text2('2X MONEY\n10000 Coins', { size: 30, fill: '#FFFFFF' }); purchaseText2.anchor.set(0.5, 0.5); purchaseText2.x = 1800; purchaseText2.y = 520; purchaseText2.visible = false; game.addChild(purchaseText2); var purchaseOption3 = game.attachAsset('purchaseButton', { anchorX: 0.5, anchorY: 0.5 }); purchaseOption3.x = 1800; purchaseOption3.y = 640; purchaseOption3.visible = false; var purchaseText3 = new Text2('2X LUCK\n1250', { size: 30, fill: '#FFFFFF' }); purchaseText3.anchor.set(0.5, 0.5); purchaseText3.x = 1800; purchaseText3.y = 640; purchaseText3.visible = false; game.addChild(purchaseText3); // Track purchase UI elements as game UI gameUIElements.push(purchaseOption1, purchaseText1, purchaseOption2, purchaseText2, purchaseOption3, purchaseText3); // Purchase event handlers purchaseOption1.down = function (x, y, obj) { if (gameState === 'playing' && playerCoins >= 500) { playerCoins -= 500; storage.playerCoins = playerCoins; xrayLevelsLeft++; storage.xrayLevelsLeft = xrayLevelsLeft; xrayUseText.setText('XRAY (' + xrayLevelsLeft + ')'); // Show all fossils for current level if (currentLevel) { for (var i = 0; i < currentLevel.blocks.length; i++) { var block = currentLevel.blocks[i]; if (block.hasFossil && !block.isCollected) { block.alpha = 0.5; // Make blocks with fossils semi-transparent } } } } }; purchaseOption2.down = function (x, y, obj) { if (gameState === 'playing' && playerCoins >= 10000) { playerCoins -= 10000; storage.playerCoins = playerCoins; doubleMoneyLevelsLeft = 20; storage.doubleMoneyLevelsLeft = doubleMoneyLevelsLeft; } }; purchaseOption3.down = function (x, y, obj) { if (gameState === 'playing' && playerCoins >= 1250) { playerCoins -= 1250; storage.playerCoins = playerCoins; doubleSpawnChanceActive = true; storage.doubleSpawnChanceActive = doubleSpawnChanceActive; } }; // XRAY use button (shown when game is playing) var xrayUseButton = game.attachAsset('purchaseButton', { anchorX: 0.5, anchorY: 0.5 }); xrayUseButton.x = 624; // Further left side of bottom center xrayUseButton.y = 2500; // Bottom of screen xrayUseButton.visible = false; var xrayUseText = new Text2('XRAY (' + xrayLevelsLeft + ')', { size: 30, fill: '#FFFFFF' }); xrayUseText.anchor.set(0.5, 0.5); xrayUseText.x = 624; xrayUseText.y = 2500; xrayUseText.visible = false; game.addChild(xrayUseText); // Back to menu button (shown when game is playing) var backToMenuButton = game.attachAsset('purchaseButton', { anchorX: 0.5, anchorY: 0.5 }); backToMenuButton.x = 1424; // Further right side of bottom center backToMenuButton.y = 2500; // Bottom of screen, same level as XRAY backToMenuButton.visible = false; var backToMenuText = new Text2('MENÜYE GERİ DÖN', { size: 25, fill: '#FFFFFF' }); backToMenuText.anchor.set(0.5, 0.5); backToMenuText.x = 1424; backToMenuText.y = 2500; backToMenuText.visible = false; game.addChild(backToMenuText); // Track XRAY use and back to menu UI elements as game UI gameUIElements.push(xrayUseButton, xrayUseText, backToMenuButton, backToMenuText); // XRAY use button click handler xrayUseButton.down = function (x, y, obj) { if (gameState === 'playing' && xrayLevelsLeft > 0) { xrayLevelsLeft--; storage.xrayLevelsLeft = xrayLevelsLeft; xrayUseText.setText('XRAY (' + xrayLevelsLeft + ')'); // Show all fossils for current level if (currentLevel) { for (var i = 0; i < currentLevel.blocks.length; i++) { var block = currentLevel.blocks[i]; if (block.hasFossil && !block.isCollected) { block.alpha = 0.5; // Make blocks with fossils semi-transparent } } } } }; // Dinosaur ability use button (shown when game is playing) var abilityUseButton = game.attachAsset('purchaseButton', { anchorX: 0.5, anchorY: 0.5 }); abilityUseButton.x = 1024; // Center bottom abilityUseButton.y = 2500; // Bottom of screen abilityUseButton.visible = false; var abilityUseText = new Text2('DİNOZOR ÖZELLİĞİ', { size: 25, fill: '#FFFFFF' }); abilityUseText.anchor.set(0.5, 0.5); abilityUseText.x = 1024; abilityUseText.y = 2500; abilityUseText.visible = false; game.addChild(abilityUseText); // Track ability button as game UI gameUIElements.push(abilityUseButton, abilityUseText); // Ability use button click handler abilityUseButton.down = function (x, y, obj) { if (gameState === 'playing' && selectedDinosaur && currentLevel) { // Use the selected dinosaur's ability if (selectedDinosaur === 'TREX') { // TREX roars and collects all fossils (only works every 10 levels) if (currentLevelNumber % 10 === 0) { // Create roar effect with screen shake animation var roarEffect = LK.getAsset('TREX', { anchorX: 0.5, anchorY: 0.5, scaleX: 3.0, scaleY: 3.0 }); roarEffect.x = 1024; roarEffect.y = 1000; roarEffect.alpha = 0.7; roarEffect.tint = 0xFF4500; // Orange roar effect currentLevel.addChild(roarEffect); // Animate roar effect with tween tween(roarEffect, { scaleX: 5.0, scaleY: 5.0, alpha: 0 }, { duration: 2000, easing: tween.easeOut, onFinish: function onFinish() { roarEffect.destroy(); } }); // Collect all fossils on the level instantly for (var i = 0; i < currentLevel.blocks.length; i++) { var block = currentLevel.blocks[i]; if (block.hasFossil && !block.isCollected) { // Instantly reveal and collect the fossil currentLevel.revealFossil(block.fossilType, block.x, block.y); // Mark block as collected block.isCollected = true; block.alpha = 0; } } } } else if (selectedDinosaur === 'SPINO') { // SPINO tail strike - find a random block and break 3 in line if (currentLevel.blocks.length > 0) { var randomIndex = Math.floor(Math.random() * currentLevel.blocks.length); var block = currentLevel.blocks[randomIndex]; if (!block.isCollected) { var blocksToBreak = [block]; var blocksPerRow = 8; var row = Math.floor(randomIndex / blocksPerRow); var col = randomIndex % blocksPerRow; // Add 2 blocks to the right for (var j = 1; j <= 2; j++) { if (col + j < blocksPerRow) { var blockIndex = row * blocksPerRow + (col + j); if (blockIndex < currentLevel.blocks.length) { var nextBlock = currentLevel.blocks[blockIndex]; if (!nextBlock.isCollected) { blocksToBreak.push(nextBlock); } } } } // Break all blocks for (var k = 0; k < blocksToBreak.length; k++) { blocksToBreak[k].performCollection(); } } } } else if (selectedDinosaur === 'GIGA') { // GIGA breaks all rocks instantly every 3 levels if (currentLevelNumber % 3 === 0) { // Create visual effect for GIGA ability var gigaEffect = LK.getAsset('GIGA', { anchorX: 0.5, anchorY: 0.5, scaleX: 2.5, scaleY: 2.5 }); gigaEffect.x = 1024; gigaEffect.y = 1000; gigaEffect.alpha = 0.8; gigaEffect.tint = 0x800080; // Purple effect for GIGA currentLevel.addChild(gigaEffect); // Animate GIGA effect with tween tween(gigaEffect, { scaleX: 4.0, scaleY: 4.0, alpha: 0 }, { duration: 1500, easing: tween.easeOut, onFinish: function onFinish() { gigaEffect.destroy(); } }); // Break all rocks instantly for (var i = 0; i < currentLevel.blocks.length; i++) { var block = currentLevel.blocks[i]; if (!block.isCollected) { block.currentHits = block.hitsRequired; // Set hits to required amount block.performCollection(); // Break the block instantly } } } } else { // For other dinosaurs, trigger their collection ability on a random block if (currentLevel.blocks.length > 0) { var availableBlocks = []; for (var i = 0; i < currentLevel.blocks.length; i++) { if (!currentLevel.blocks[i].isCollected) { availableBlocks.push(currentLevel.blocks[i]); } } if (availableBlocks.length > 0) { var randomBlock = availableBlocks[Math.floor(Math.random() * availableBlocks.length)]; randomBlock.collectBlock(); } } } } }; // Back to menu button click handler backToMenuButton.down = function (x, y, obj) { if (gameState === 'playing') { // Clean up current level if (currentLevel) { currentLevel.destroy(); currentLevel = null; } // Reset game state gameState = 'nickname'; // Hide game UI elements hideAllGameUI(); // Show menu UI elements showAllMenuUI(); } }; // Initialize display updateNicknameDisplay(); coinsText.setText('Coins: ' + playerCoins); // Start background music LK.playMusic('backgroundMusic');
===================================================================
--- original.js
+++ change.js
@@ -356,13 +356,31 @@
self.performCollection();
}, delay);
}
} else if (selectedDinosaur === 'Mutated BARYONYX') {
- // Mutated BARYONYX 0.9x faster (90% speed increase)
- var delay = 30;
- LK.setTimeout(function () {
- self.performCollection();
- }, delay);
+ // Mutated BARYONYX ability every 4 levels with reduced hits
+ if (currentLevelNumber % 4 === 0) {
+ // Every 4 levels, use special ability
+ var originalHitsRequired = self.hitsRequired;
+ // Set reduced hit requirements: normal blocks 1 hit, hard blocks 3 hits
+ self.hitsRequired = self.blockType === 'hardRock' ? 3 : 1;
+ // If current hits already meet new requirement, collect immediately
+ if (self.currentHits >= self.hitsRequired) {
+ self.performCollection();
+ } else {
+ // Continue with reduced requirement
+ var delay = 30;
+ LK.setTimeout(function () {
+ self.performCollection();
+ }, delay);
+ }
+ } else {
+ // Regular faster digging on non-ability levels
+ var delay = 30;
+ LK.setTimeout(function () {
+ self.performCollection();
+ }, delay);
+ }
} else if (selectedDinosaur === 'Mutated PARASAUROLUPHUS') {
// Mutated PARASAUROLUPHUS ability every 2 matches with reduced hits
var currentUsage = storage.mutatedParasaurolophusMatches || 0;
currentUsage++;