User prompt
online skor tablosu ekler misin ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
ARAKAYA ŞARKI KOY
User prompt
MENÜDEKİ ÇUNUKLARI SİL
User prompt
MENÜDE KAÇ WİN ALSIĞIN YAZSIN ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
KEMALDEV YAZISINA 2 KERE BASARSAN WİN AL
User prompt
Add anything you want to the game ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Menu gta 2 style ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Menu gta 2 style ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
3 adet daha hero ekle
User prompt
Oyun ekranını biraz aşağı al ortala
User prompt
LOGADA OLSUN BAŞTA ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
KEMALDEV WRITE BEFORE THE MENU WHEN THE GAME STARTS ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
LET IT BE WRITE KEMALDEV AND THEN IT BE THE LOGO
User prompt
Let the game be fun and fluent ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Please fix the bug: 'Uncaught ReferenceError: scoreText is not defined' in or related to this line: 'scoreText.setText('Score: ' + LK.getScore());' Line Number: 273
User prompt
Game not showing fix
User prompt
make the menu visible
User prompt
Please fix the bug: 'Cannot read properties of undefined (reading '0')' in or related to this line: 'if (grid[y][x] === null) {' Line Number: 227
User prompt
Add menu
User prompt
remove the numbers from the heroes
Code edit (1 edits merged)
Please save this source code
User prompt
Hero Fusion Academy
Initial prompt
superhero merge
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); var storage = LK.import("@upit/storage.v1"); /**** * Classes ****/ var Hero = Container.expand(function (tier) { var self = Container.call(this); self.tier = tier || 1; self.gridX = -1; self.gridY = -1; self.isDragging = false; self.originalX = 0; self.originalY = 0; var heroAssets = ['heroTier1', 'heroTier2', 'heroTier3', 'heroTier4', 'heroTier5', 'heroTier6', 'heroTier7', 'heroTier8', 'heroTier9']; var heroGraphics = self.attachAsset(heroAssets[self.tier - 1], { anchorX: 0.5, anchorY: 0.5 }); // Tier text removed - heroes now display without numbers self.setGridPosition = function (gridX, gridY) { self.gridX = gridX; self.gridY = gridY; self.x = GRID_START_X + gridX * CELL_SIZE + CELL_SIZE / 2; self.y = GRID_START_Y + gridY * CELL_SIZE + CELL_SIZE / 2; self.originalX = self.x; self.originalY = self.y; }; self.down = function (x, y, obj) { if (!gameOver) { self.isDragging = true; draggedHero = self; self.originalX = self.x; self.originalY = self.y; tween(self, { scaleX: 1.1, scaleY: 1.1 }, { duration: 100 }); } }; self.up = function (x, y, obj) { if (self.isDragging) { self.isDragging = false; draggedHero = null; tween(self, { scaleX: 1, scaleY: 1 }, { duration: 100 }); // Check for merge var targetGridX = Math.floor((self.x - GRID_START_X) / CELL_SIZE); var targetGridY = Math.floor((self.y - GRID_START_Y) / CELL_SIZE); if (targetGridX >= 0 && targetGridX < GRID_WIDTH && targetGridY >= 0 && targetGridY < GRID_HEIGHT) { var targetHero = grid[targetGridY][targetGridX]; if (targetHero && targetHero !== self && targetHero.tier === self.tier) { // Merge! performMerge(self, targetHero); return; } } // Return to original position with bounce effect tween(self, { x: self.originalX, y: self.originalY }, { duration: 300, easing: tween.bounceOut }); } }; return self; }); var Particle = Container.expand(function (x, y, color) { var self = Container.call(this); self.x = x; self.y = y; var particle = self.attachAsset('gridCell', { anchorX: 0.5, anchorY: 0.5, scaleX: 0.1, scaleY: 0.1 }); particle.tint = color; self.velocity = { x: (Math.random() - 0.5) * 20, y: (Math.random() - 0.5) * 20 - 10 }; self.life = 1.0; self.update = function () { self.x += self.velocity.x; self.y += self.velocity.y; self.velocity.y += 0.5; // gravity self.life -= 0.02; particle.alpha = self.life; if (self.life <= 0) { self.destroy(); var index = particles.indexOf(self); if (index > -1) particles.splice(index, 1); } }; return self; }); var PowerUp = Container.expand(function (type) { var self = Container.call(this); self.type = type; // 'score', 'clear', 'bomb' self.gridX = -1; self.gridY = -1; self.isUsed = false; var colors = { score: 0xFFD700, clear: 0x00FF00, bomb: 0xFF4444 }; var powerUpGraphics = self.attachAsset('gridCell', { anchorX: 0.5, anchorY: 0.5, scaleX: 0.8, scaleY: 0.8 }); powerUpGraphics.tint = colors[type]; // Add pulsing animation function pulse() { tween(powerUpGraphics, { scaleX: 0.9, scaleY: 0.9, alpha: 0.8 }, { duration: 500, easing: tween.easeInOut, onFinish: function onFinish() { tween(powerUpGraphics, { scaleX: 0.8, scaleY: 0.8, alpha: 1.0 }, { duration: 500, easing: tween.easeInOut, onFinish: pulse }); } }); } pulse(); // Power-up symbol var symbol = new Text2(type === 'score' ? '$' : type === 'clear' ? '✓' : '💥', { size: 60, fill: 0xFFFFFF }); symbol.anchor.set(0.5, 0.5); self.addChild(symbol); self.setGridPosition = function (gridX, gridY) { self.gridX = gridX; self.gridY = gridY; self.x = GRID_START_X + gridX * CELL_SIZE + CELL_SIZE / 2; self.y = GRID_START_Y + gridY * CELL_SIZE + CELL_SIZE / 2; }; self.activate = function () { if (self.isUsed) return; self.isUsed = true; if (self.type === 'score') { LK.setScore(LK.getScore() + 500); scoreText.setText('Score: ' + LK.getScore()); LK.effects.flashScreen(0xFFD700, 300); } else if (self.type === 'clear') { // Clear bottom row for (var x = 0; x < GRID_WIDTH; x++) { if (grid[GRID_HEIGHT - 1][x]) { var hero = grid[GRID_HEIGHT - 1][x]; grid[GRID_HEIGHT - 1][x] = null; hero.destroy(); var index = heroes.indexOf(hero); if (index > -1) heroes.splice(index, 1); } } LK.effects.flashScreen(0x00FF00, 300); } else if (self.type === 'bomb') { // Destroy 3x3 area around power-up for (var dy = -1; dy <= 1; dy++) { for (var dx = -1; dx <= 1; dx++) { var targetX = self.gridX + dx; var targetY = self.gridY + dy; if (targetX >= 0 && targetX < GRID_WIDTH && targetY >= 0 && targetY < GRID_HEIGHT) { if (grid[targetY][targetX] && grid[targetY][targetX] !== self) { var hero = grid[targetY][targetX]; grid[targetY][targetX] = null; hero.destroy(); var index = heroes.indexOf(hero); if (index > -1) heroes.splice(index, 1); } } } } LK.effects.flashScreen(0xFF4444, 300); } // Remove power-up from grid grid[self.gridY][self.gridX] = null; self.destroy(); var powerUpIndex = powerUps.indexOf(self); if (powerUpIndex > -1) powerUps.splice(powerUpIndex, 1); }; self.down = function () { self.activate(); }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x1a1a1a }); /**** * Game Code ****/ var GRID_WIDTH = 5; var GRID_HEIGHT = 7; var CELL_SIZE = 140; var GRID_START_X = (2048 - GRID_WIDTH * CELL_SIZE) / 2; var GRID_START_Y = 600; var grid = []; var heroes = []; var draggedHero = null; var gameOver = false; var gameStarted = false; var spawnTimer = 0; var spawnInterval = 180; // 3 seconds at 60fps var menuContainer = null; var scoreText = null; var particles = []; var powerUps = []; var powerUpSpawnChance = 0.05; // 5% chance to spawn power-up instead of hero var comboCount = 0; var comboTimer = 0; var comboText = null; var lastMergeTime = 0; var kemaldevClickCount = 0; function showMainMenu() { menuContainer = new Container(); menuContainer.alpha = 0; game.addChild(menuContainer); // Fade in menu tween(menuContainer, { alpha: 1 }, { duration: 500, easing: tween.easeOut }); // Dark urban background with gradient effect using multiple layers var menuBg1 = LK.getAsset('gridCell', { anchorX: 0.5, anchorY: 0.5, scaleX: 15, scaleY: 20 }); menuBg1.x = 2048 / 2; menuBg1.y = 2732 / 2; menuBg1.tint = 0x0a0a0a; menuBg1.alpha = 1.0; menuContainer.addChild(menuBg1); // Add dark cyan overlay for GTA 2 aesthetic var menuBg2 = LK.getAsset('gridCell', { anchorX: 0.5, anchorY: 0.5, scaleX: 15, scaleY: 20 }); menuBg2.x = 2048 / 2; menuBg2.y = 2732 / 2; menuBg2.tint = 0x003333; menuBg2.alpha = 0.6; menuContainer.addChild(menuBg2); // KEMALDEV Logo with neon cyan color var logoText = new Text2('KEMALDEV', { size: 220, fill: 0x00FFFF }); logoText.anchor.set(0.5, 0.5); logoText.x = 2048 / 2; logoText.y = 900; menuContainer.addChild(logoText); // Add click detection to KEMALDEV logo logoText.down = function () { kemaldevClickCount++; // Visual feedback for click tween(logoText, { scaleX: 1.2, scaleY: 1.2, tint: 0xFFFFFF }, { duration: 100, easing: tween.easeOut, onFinish: function onFinish() { tween(logoText, { scaleX: 1, scaleY: 1, tint: 0x00FFFF }, { duration: 100, easing: tween.easeIn }); } }); // Check if clicked 2 times if (kemaldevClickCount >= 2) { // Increment win count in storage storage.totalWins = (storage.totalWins || 0) + 1; // Flash screen gold LK.effects.flashScreen(0xFFD700, 1000); // Show you win after short delay LK.setTimeout(function () { LK.showYouWin(); }, 500); } }; // Game title with neon green color var gameTitle = new Text2('HERO FUSION ACADEMY', { size: 120, fill: 0x00FF00 }); gameTitle.anchor.set(0.5, 0.5); gameTitle.x = 2048 / 2; gameTitle.y = 1150; menuContainer.addChild(gameTitle); // Add neon glow pulsing animation to KEMALDEV logo function pulseLogo() { tween(logoText, { tint: 0x66FFFF, scaleX: 1.1, scaleY: 1.1 }, { duration: 1200, easing: tween.easeInOut, onFinish: function onFinish() { tween(logoText, { tint: 0x00FFFF, scaleX: 1, scaleY: 1 }, { duration: 1200, easing: tween.easeInOut, onFinish: pulseLogo }); } }); } pulseLogo(); // Add neon glow pulsing animation to title function pulseTitle() { tween(gameTitle, { tint: 0x66FF66, scaleX: 1.05, scaleY: 1.05 }, { duration: 1500, easing: tween.easeInOut, onFinish: function onFinish() { tween(gameTitle, { tint: 0x00FF00, scaleX: 1, scaleY: 1 }, { duration: 1500, easing: tween.easeInOut, onFinish: pulseTitle }); } }); } pulseTitle(); // Subtitle with neon yellow var subtitle = new Text2('MERGE IDENTICAL HEROES TO CREATE POWERFUL CHAMPIONS!', { size: 70, fill: 0xFFFF00 }); subtitle.anchor.set(0.5, 0.5); subtitle.x = 2048 / 2; subtitle.y = 1300; menuContainer.addChild(subtitle); // GTA 2 style decorative elements - neon bars var topBar = LK.getAsset('gridCell', { anchorX: 0.5, anchorY: 0.5, scaleX: 12, scaleY: 0.2 }); topBar.x = 2048 / 2; topBar.y = 750; topBar.tint = 0x00FFFF; topBar.alpha = 0.8; menuContainer.addChild(topBar); var bottomBar = LK.getAsset('gridCell', { anchorX: 0.5, anchorY: 0.5, scaleX: 12, scaleY: 0.2 }); bottomBar.x = 2048 / 2; bottomBar.y = 2100; bottomBar.tint = 0x00FFFF; bottomBar.alpha = 0.8; menuContainer.addChild(bottomBar); // Side accent bars var leftBar = LK.getAsset('gridCell', { anchorX: 0.5, anchorY: 0.5, scaleX: 0.3, scaleY: 8 }); leftBar.x = 300; leftBar.y = 1400; leftBar.tint = 0x00FF00; leftBar.alpha = 0.6; menuContainer.addChild(leftBar); var rightBar = LK.getAsset('gridCell', { anchorX: 0.5, anchorY: 0.5, scaleX: 0.3, scaleY: 8 }); rightBar.x = 1748; rightBar.y = 1400; rightBar.tint = 0x00FF00; rightBar.alpha = 0.6; menuContainer.addChild(rightBar); // Win count display with neon styling var totalWins = storage.totalWins || 0; var winCountText = new Text2('WINS: ' + totalWins, { size: 100, fill: 0xFF00FF }); winCountText.anchor.set(0.5, 0.5); winCountText.x = 2048 / 2; winCountText.y = 1450; menuContainer.addChild(winCountText); // Add neon glow animation to win count function pulseWinCount() { tween(winCountText, { tint: 0xFF66FF, scaleX: 1.1, scaleY: 1.1 }, { duration: 1000, easing: tween.easeInOut, onFinish: function onFinish() { tween(winCountText, { tint: 0xFF00FF, scaleX: 1, scaleY: 1 }, { duration: 1000, easing: tween.easeInOut, onFinish: pulseWinCount }); } }); } pulseWinCount(); // Start button with neon styling var startButton = LK.getAsset('gridCell', { anchorX: 0.5, anchorY: 0.5, scaleX: 4, scaleY: 1.5 }); startButton.x = 2048 / 2; startButton.y = 1650; startButton.tint = 0x003333; startButton.alpha = 0.9; menuContainer.addChild(startButton); // Button border effect var buttonBorder = LK.getAsset('gridCell', { anchorX: 0.5, anchorY: 0.5, scaleX: 4.2, scaleY: 1.7 }); buttonBorder.x = 2048 / 2; buttonBorder.y = 1650; buttonBorder.tint = 0x00FFFF; buttonBorder.alpha = 0.7; menuContainer.addChild(buttonBorder); menuContainer.addChild(startButton); // Re-add to put on top var startButtonText = new Text2('>>> START GAME <<<', { size: 90, fill: 0x00FFFF }); startButtonText.anchor.set(0.5, 0.5); startButtonText.x = 2048 / 2; startButtonText.y = 1650; menuContainer.addChild(startButtonText); // Animate the decorative bars function animateBars() { tween(topBar, { alpha: 1.0 }, { duration: 800, easing: tween.easeInOut, onFinish: function onFinish() { tween(topBar, { alpha: 0.4 }, { duration: 800, easing: tween.easeInOut, onFinish: animateBars }); } }); } animateBars(); // Button interaction with neon effects startButton.down = function () { tween(startButton, { tint: 0x006666, scaleX: 3.8, scaleY: 1.4 }, { duration: 100, easing: tween.easeOut, onFinish: function onFinish() { tween(startButton, { tint: 0x003333, scaleX: 4, scaleY: 1.5 }, { duration: 100, easing: tween.easeIn }); } }); tween(startButtonText, { tint: 0x66FFFF }, { duration: 100, onFinish: function onFinish() { tween(startButtonText, { tint: 0x00FFFF }, { duration: 100 }); } }); startGame(); }; } function startGame() { if (menuContainer) { menuContainer.destroy(); menuContainer = null; } gameStarted = true; initializeGame(); } function initializeGame() { // Initialize grid for (var y = 0; y < GRID_HEIGHT; y++) { grid[y] = []; for (var x = 0; x < GRID_WIDTH; x++) { grid[y][x] = null; // Create grid cell visuals var cell = LK.getAsset('gridCell', { anchorX: 0.5, anchorY: 0.5 }); cell.x = GRID_START_X + x * CELL_SIZE + CELL_SIZE / 2; cell.y = GRID_START_Y + y * CELL_SIZE + CELL_SIZE / 2; cell.alpha = 0.3; game.addChild(cell); } } // Score display scoreText = new Text2('Score: 0', { size: 80, fill: 0xFFFFFF }); scoreText.anchor.set(0.5, 0); LK.gui.top.addChild(scoreText); // KEMALDEV Logo var logoGameText = new Text2('KEMALDEV', { size: 120, fill: 0xFFD700 }); logoGameText.anchor.set(0.5, 0); logoGameText.x = 2048 / 2; logoGameText.y = 150; game.addChild(logoGameText); // Add click detection to KEMALDEV logo in game logoGameText.down = function () { kemaldevClickCount++; // Visual feedback for click tween(logoGameText, { scaleX: 1.2, scaleY: 1.2, tint: 0xFFFFFF }, { duration: 100, easing: tween.easeOut, onFinish: function onFinish() { tween(logoGameText, { scaleX: 1, scaleY: 1, tint: 0xFFD700 }, { duration: 100, easing: tween.easeIn }); } }); // Check if clicked 2 times if (kemaldevClickCount >= 2) { // Increment win count in storage storage.totalWins = (storage.totalWins || 0) + 1; // Flash screen gold LK.effects.flashScreen(0xFFD700, 1000); // Show you win after short delay LK.setTimeout(function () { LK.showYouWin(); }, 500); } }; // Title var titleText = new Text2('Hero Fusion Academy', { size: 100, fill: 0xFFD700 }); titleText.anchor.set(0.5, 0); titleText.x = 2048 / 2; titleText.y = 280; game.addChild(titleText); // Instructions var instructionText = new Text2('Drag matching heroes to merge them!', { size: 60, fill: 0xFFFFFF }); instructionText.anchor.set(0.5, 0); instructionText.x = 2048 / 2; instructionText.y = 400; game.addChild(instructionText); // Spawn initial heroes spawnHero(); spawnHero(); } function getEmptyCell() { var emptyCells = []; for (var y = 0; y < GRID_HEIGHT; y++) { for (var x = 0; x < GRID_WIDTH; x++) { if (grid[y][x] === null) { emptyCells.push({ x: x, y: y }); } } } return emptyCells.length > 0 ? emptyCells[Math.floor(Math.random() * emptyCells.length)] : null; } function spawnHero() { var emptyCell = getEmptyCell(); if (emptyCell) { // Small chance to spawn power-up instead of hero if (Math.random() < powerUpSpawnChance && LK.getScore() > 500) { var powerUpTypes = ['score', 'clear', 'bomb']; var powerUpType = powerUpTypes[Math.floor(Math.random() * powerUpTypes.length)]; var powerUp = new PowerUp(powerUpType); powerUp.setGridPosition(emptyCell.x, emptyCell.y); grid[emptyCell.y][emptyCell.x] = powerUp; powerUps.push(powerUp); game.addChild(powerUp); // Spawn animation with special effect powerUp.scaleX = 0; powerUp.scaleY = 0; tween(powerUp, { scaleX: 0.8, scaleY: 0.8 }, { duration: 400, easing: tween.bounceOut }); LK.effects.flashScreen(0xFFD700, 200); return; } var tier = Math.random() < 0.8 ? 1 : 2; // 80% chance for tier 1, 20% for tier 2 var hero = new Hero(tier); hero.setGridPosition(emptyCell.x, emptyCell.y); grid[emptyCell.y][emptyCell.x] = hero; heroes.push(hero); game.addChild(hero); // Spawn animation with subtle screen shake hero.scaleX = 0; hero.scaleY = 0; tween(hero, { scaleX: 1, scaleY: 1 }, { duration: 300, easing: tween.bounceOut }); // Add screen shake effect tween(game, { x: 5 }, { duration: 50, easing: tween.easeOut, onFinish: function onFinish() { tween(game, { x: -5 }, { duration: 50, easing: tween.easeOut, onFinish: function onFinish() { tween(game, { x: 0 }, { duration: 50, easing: tween.easeOut }); } }); } }); LK.getSound('spawn').play(); } else { // Grid is full - game over gameOver = true; // Animate all heroes shrinking before game over for (var i = 0; i < heroes.length; i++) { tween(heroes[i], { scaleX: 0.8, scaleY: 0.8, alpha: 0.5 }, { duration: 800, easing: tween.easeIn }); } LK.setTimeout(function () { LK.showGameOver(); }, 1000); } } function performMerge(hero1, hero2) { if (hero1.tier >= 9) return; // Max tier reached // Combo system var currentTime = Date.now(); if (currentTime - lastMergeTime < 3000) { // 3 seconds for combo comboCount++; } else { comboCount = 1; } lastMergeTime = currentTime; comboTimer = 180; // 3 seconds at 60fps // Calculate score with combo multiplier var baseScore = hero1.tier * 100; var comboMultiplier = Math.min(comboCount, 10); // Max 10x multiplier var scoreIncrease = baseScore * comboMultiplier; LK.setScore(LK.getScore() + scoreIncrease); scoreText.setText('Score: ' + LK.getScore()); // Show combo text if (comboCount > 1) { if (comboText) comboText.destroy(); comboText = new Text2('COMBO x' + comboCount + '!', { size: 80, fill: 0xFF4444 }); comboText.anchor.set(0.5, 0.5); comboText.x = 2048 / 2; comboText.y = 500; comboText.alpha = 0; game.addChild(comboText); tween(comboText, { alpha: 1, scaleX: 1.2, scaleY: 1.2, y: 450 }, { duration: 300, easing: tween.bounceOut, onFinish: function onFinish() { tween(comboText, { alpha: 0, y: 400 }, { duration: 1000, easing: tween.easeOut }); } }); } // Remove both heroes from grid grid[hero1.gridY][hero1.gridX] = null; grid[hero2.gridY][hero2.gridX] = null; // Create new hero with higher tier var newHero = new Hero(hero1.tier + 1); newHero.setGridPosition(hero2.gridX, hero2.gridY); grid[hero2.gridY][hero2.gridX] = newHero; heroes.push(newHero); game.addChild(newHero); // Merge animation newHero.scaleX = 0; newHero.scaleY = 0; tween(newHero, { scaleX: 1.2, scaleY: 1.2 }, { duration: 200, easing: tween.easeOut }); tween(newHero, { scaleX: 1, scaleY: 1 }, { duration: 200, easing: tween.easeIn }); // Flash effect with color transition LK.effects.flashObject(newHero, 0xFFFFFF, 500); // Create particle explosion var particleColors = [0xFFD700, 0xFF6B6B, 0x4ECDC4, 0x45B7D1, 0xF9CA24]; for (var i = 0; i < 8; i++) { var particle = new Particle(newHero.x + (Math.random() - 0.5) * 40, newHero.y + (Math.random() - 0.5) * 40, particleColors[Math.floor(Math.random() * particleColors.length)]); particles.push(particle); game.addChild(particle); } // Add golden glow effect for high-tier merges if (newHero.tier >= 4) { tween(newHero, { tint: 0xFFD700 }, { duration: 300, easing: tween.easeOut, onFinish: function onFinish() { tween(newHero, { tint: 0xFFFFFF }, { duration: 300, easing: tween.easeIn }); } }); } // Remove old heroes hero1.destroy(); hero2.destroy(); // Remove from heroes array var index1 = heroes.indexOf(hero1); if (index1 > -1) heroes.splice(index1, 1); var index2 = heroes.indexOf(hero2); if (index2 > -1) heroes.splice(index2, 1); LK.getSound('merge').play(); // Check for win condition (tier 9 hero created) if (newHero.tier >= 9) { // Increment win count in storage storage.totalWins = (storage.totalWins || 0) + 1; // Add special rainbow effect for max tier hero var rainbowCycle = function rainbowCycle() { var colors = [0xFF0000, 0xFF8000, 0xFFFF00, 0x00FF00, 0x0080FF, 0x8000FF]; var colorIndex = 0; function nextColor() { tween(newHero, { tint: colors[colorIndex] }, { duration: 200, easing: tween.easeInOut, onFinish: function onFinish() { colorIndex = (colorIndex + 1) % colors.length; nextColor(); } }); } nextColor(); }; rainbowCycle(); LK.setTimeout(function () { LK.showYouWin(); }, 1000); } } game.move = function (x, y, obj) { if (draggedHero && draggedHero.isDragging) { draggedHero.x = x; draggedHero.y = y; } }; game.update = function () { if (gameStarted && !gameOver) { spawnTimer++; if (spawnTimer >= spawnInterval) { spawnHero(); spawnTimer = 0; // Gradually decrease spawn interval to increase difficulty if (spawnInterval > 120) { spawnInterval -= 2; } } // Update combo timer if (comboTimer > 0) { comboTimer--; if (comboTimer <= 0 && comboCount > 0) { comboCount = 0; if (comboText) { tween(comboText, { alpha: 0 }, { duration: 200, onFinish: function onFinish() { comboText.destroy(); comboText = null; } }); } } } // Clean up destroyed particles (update is called automatically by LK) for (var i = particles.length - 1; i >= 0; i--) { if (!particles[i].parent) { particles.splice(i, 1); } } } }; // Show KEMALDEV splash screen first, then main menu showKemaldevSplash(); function showKemaldevSplash() { var splashContainer = new Container(); splashContainer.alpha = 0; game.addChild(splashContainer); // Black background for splash var splashBg = LK.getAsset('gridCell', { anchorX: 0.5, anchorY: 0.5, scaleX: 20, scaleY: 25 }); splashBg.x = 2048 / 2; splashBg.y = 2732 / 2; splashBg.tint = 0x000000; splashContainer.addChild(splashBg); // Large KEMALDEV text positioned at the top var kemaldevText = new Text2('KEMALDEV', { size: 300, fill: 0xFFD700 }); kemaldevText.anchor.set(0.5, 0.5); kemaldevText.x = 2048 / 2; kemaldevText.y = 800; kemaldevText.alpha = 0; kemaldevText.scaleX = 0.5; kemaldevText.scaleY = 0.5; splashContainer.addChild(kemaldevText); // Add click detection to KEMALDEV logo in splash kemaldevText.down = function () { kemaldevClickCount++; // Visual feedback for click tween(kemaldevText, { scaleX: 1.4, scaleY: 1.4, tint: 0xFFFFFF }, { duration: 100, easing: tween.easeOut, onFinish: function onFinish() { tween(kemaldevText, { scaleX: 1.3, scaleY: 1.3, tint: 0xFFD700 }, { duration: 100, easing: tween.easeIn }); } }); // Check if clicked 2 times if (kemaldevClickCount >= 2) { // Increment win count in storage storage.totalWins = (storage.totalWins || 0) + 1; // Flash screen gold LK.effects.flashScreen(0xFFD700, 1000); // Show you win after short delay LK.setTimeout(function () { LK.showYouWin(); }, 500); } }; // Developer subtitle var devText = new Text2('Game Developer', { size: 120, fill: 0xFFFFFF }); devText.anchor.set(0.5, 0.5); devText.x = 2048 / 2; devText.y = 1200; devText.alpha = 0; splashContainer.addChild(devText); // Fade in splash screen tween(splashContainer, { alpha: 1 }, { duration: 300, easing: tween.easeOut, onFinish: function onFinish() { // Animate KEMALDEV text entrance with scale and fade tween(kemaldevText, { alpha: 1, scaleX: 1.3, scaleY: 1.3 }, { duration: 1000, easing: tween.bounceOut, onFinish: function onFinish() { // Scale back to normal size tween(kemaldevText, { scaleX: 1, scaleY: 1 }, { duration: 400, easing: tween.easeOut, onFinish: function onFinish() { // Fade in subtitle tween(devText, { alpha: 1 }, { duration: 500, easing: tween.easeOut, onFinish: function onFinish() { // Add pulsing effect to logo function pulseLogo() { tween(kemaldevText, { scaleX: 1.1, scaleY: 1.1 }, { duration: 600, easing: tween.easeInOut, onFinish: function onFinish() { tween(kemaldevText, { scaleX: 1, scaleY: 1 }, { duration: 600, easing: tween.easeInOut, onFinish: pulseLogo }); } }); } pulseLogo(); // Hold for a moment, then fade out and show menu LK.setTimeout(function () { tween(splashContainer, { alpha: 0 }, { duration: 800, easing: tween.easeIn, onFinish: function onFinish() { splashContainer.destroy(); showMainMenu(); } }); }, 2500); } }); } }); } }); } }); }
===================================================================
--- original.js
+++ change.js
@@ -1,8 +1,9 @@
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
+var storage = LK.import("@upit/storage.v1");
/****
* Classes
****/
@@ -308,8 +309,10 @@
}
});
// Check if clicked 2 times
if (kemaldevClickCount >= 2) {
+ // Increment win count in storage
+ storage.totalWins = (storage.totalWins || 0) + 1;
// Flash screen gold
LK.effects.flashScreen(0xFFD700, 1000);
// Show you win after short delay
LK.setTimeout(function () {
@@ -426,17 +429,50 @@
rightBar.y = 1400;
rightBar.tint = 0x00FF00;
rightBar.alpha = 0.6;
menuContainer.addChild(rightBar);
+ // Win count display with neon styling
+ var totalWins = storage.totalWins || 0;
+ var winCountText = new Text2('WINS: ' + totalWins, {
+ size: 100,
+ fill: 0xFF00FF
+ });
+ winCountText.anchor.set(0.5, 0.5);
+ winCountText.x = 2048 / 2;
+ winCountText.y = 1450;
+ menuContainer.addChild(winCountText);
+ // Add neon glow animation to win count
+ function pulseWinCount() {
+ tween(winCountText, {
+ tint: 0xFF66FF,
+ scaleX: 1.1,
+ scaleY: 1.1
+ }, {
+ duration: 1000,
+ easing: tween.easeInOut,
+ onFinish: function onFinish() {
+ tween(winCountText, {
+ tint: 0xFF00FF,
+ scaleX: 1,
+ scaleY: 1
+ }, {
+ duration: 1000,
+ easing: tween.easeInOut,
+ onFinish: pulseWinCount
+ });
+ }
+ });
+ }
+ pulseWinCount();
// Start button with neon styling
var startButton = LK.getAsset('gridCell', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 4,
scaleY: 1.5
});
startButton.x = 2048 / 2;
- startButton.y = 1600;
+ startButton.y = 1650;
startButton.tint = 0x003333;
startButton.alpha = 0.9;
menuContainer.addChild(startButton);
// Button border effect
@@ -446,9 +482,9 @@
scaleX: 4.2,
scaleY: 1.7
});
buttonBorder.x = 2048 / 2;
- buttonBorder.y = 1600;
+ buttonBorder.y = 1650;
buttonBorder.tint = 0x00FFFF;
buttonBorder.alpha = 0.7;
menuContainer.addChild(buttonBorder);
menuContainer.addChild(startButton); // Re-add to put on top
@@ -457,9 +493,9 @@
fill: 0x00FFFF
});
startButtonText.anchor.set(0.5, 0.5);
startButtonText.x = 2048 / 2;
- startButtonText.y = 1600;
+ startButtonText.y = 1650;
menuContainer.addChild(startButtonText);
// Animate the decorative bars
function animateBars() {
tween(topBar, {
@@ -578,8 +614,10 @@
}
});
// Check if clicked 2 times
if (kemaldevClickCount >= 2) {
+ // Increment win count in storage
+ storage.totalWins = (storage.totalWins || 0) + 1;
// Flash screen gold
LK.effects.flashScreen(0xFFD700, 1000);
// Show you win after short delay
LK.setTimeout(function () {
@@ -818,8 +856,10 @@
if (index2 > -1) heroes.splice(index2, 1);
LK.getSound('merge').play();
// Check for win condition (tier 9 hero created)
if (newHero.tier >= 9) {
+ // Increment win count in storage
+ storage.totalWins = (storage.totalWins || 0) + 1;
// Add special rainbow effect for max tier hero
var rainbowCycle = function rainbowCycle() {
var colors = [0xFF0000, 0xFF8000, 0xFFFF00, 0x00FF00, 0x0080FF, 0x8000FF];
var colorIndex = 0;
@@ -938,8 +978,10 @@
}
});
// Check if clicked 2 times
if (kemaldevClickCount >= 2) {
+ // Increment win count in storage
+ storage.totalWins = (storage.totalWins || 0) + 1;
// Flash screen gold
LK.effects.flashScreen(0xFFD700, 1000);
// Show you win after short delay
LK.setTimeout(function () {
pixel art Hulk. In-Game asset. 2d. High contrast. No shadows
attack on titan colossal titan pixel art. In-Game asset. 2d. High contrast. No shadows
KANEKİ PİXEL ART GHOUL. In-Game asset. 2d. High contrast. No shadows
PİXEL ART SİLVER SURFER. In-Game asset. 2d. High contrast. No shadows
Pixel art
pixel art red gurdian. In-Game asset. 2d. High contrast. No shadows
pixel art Hero. In-Game asset. 2d. High contrast. No shadows
PNG