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() { // Start background music LK.playMusic('backgroundMusic'); 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); // Online Leaderboard var leaderboardTitle = new Text2('ONLINE LEADERBOARD', { size: 80, fill: 0x00FFFF }); leaderboardTitle.anchor.set(0.5, 0.5); leaderboardTitle.x = 2048 / 2; leaderboardTitle.y = 1400; menuContainer.addChild(leaderboardTitle); // Simulated online scores (in a real implementation, this would come from a server) var leaderboardData = [{ name: 'KEMALDEV', score: 99999 }, { name: 'PLAYER_X', score: 85420 }, { name: 'HERO_MASTER', score: 72350 }, { name: 'FUSION_KING', score: 68900 }, { name: 'ACE_GAMER', score: 55670 }]; // Add current player's best score to leaderboard var playerBestScore = storage.bestScore || 0; if (playerBestScore > 0) { leaderboardData.push({ name: 'YOU', score: playerBestScore }); // Sort by score descending leaderboardData.sort(function (a, b) { return b.score - a.score; }); // Keep only top 5 leaderboardData = leaderboardData.slice(0, 5); } // Display leaderboard entries var _loop = function _loop() { entry = leaderboardData[i]; rankText = i + 1 + '. ' + entry.name + ': ' + entry.score; entryColor = entry.name === 'YOU' ? 0xFFD700 : entry.name === 'KEMALDEV' ? 0xFF0000 : 0xFFFFFF; leaderboardEntry = new Text2(rankText, { size: 50, fill: entryColor }); leaderboardEntry.anchor.set(0.5, 0.5); leaderboardEntry.x = 2048 / 2; leaderboardEntry.y = 1450 + i * 60; menuContainer.addChild(leaderboardEntry); // Add pulsing effect to player's score if (entry.name === 'YOU') { var _pulsePlayerScore = function pulsePlayerScore(textObj) { tween(textObj, { scaleX: 1.1, scaleY: 1.1 }, { duration: 800, easing: tween.easeInOut, onFinish: function onFinish() { tween(textObj, { scaleX: 1, scaleY: 1 }, { duration: 800, easing: tween.easeInOut, onFinish: function onFinish() { _pulsePlayerScore(textObj); } }); } }); }; _pulsePlayerScore(leaderboardEntry); } }, entry, rankText, entryColor, leaderboardEntry; for (var i = 0; i < leaderboardData.length; i++) { _loop(); } // Win count display with neon styling var totalWins = storage.totalWins || 0; var winCountText = new Text2('WINS: ' + totalWins, { size: 80, fill: 0xFF00FF }); winCountText.anchor.set(0.5, 0.5); winCountText.x = 2048 / 2; winCountText.y = 1800; 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 = 2000; 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 = 2000; 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 = 2000; menuContainer.addChild(startButtonText); // 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 }); } // Update best score in storage before game over var currentScore = LK.getScore(); if (!storage.bestScore || currentScore > storage.bestScore) { storage.bestScore = currentScore; } 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; // Update best score in storage var currentScore = LK.getScore(); if (!storage.bestScore || currentScore > storage.bestScore) { storage.bestScore = currentScore; } // 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
@@ -385,17 +385,103 @@
subtitle.anchor.set(0.5, 0.5);
subtitle.x = 2048 / 2;
subtitle.y = 1300;
menuContainer.addChild(subtitle);
+ // Online Leaderboard
+ var leaderboardTitle = new Text2('ONLINE LEADERBOARD', {
+ size: 80,
+ fill: 0x00FFFF
+ });
+ leaderboardTitle.anchor.set(0.5, 0.5);
+ leaderboardTitle.x = 2048 / 2;
+ leaderboardTitle.y = 1400;
+ menuContainer.addChild(leaderboardTitle);
+ // Simulated online scores (in a real implementation, this would come from a server)
+ var leaderboardData = [{
+ name: 'KEMALDEV',
+ score: 99999
+ }, {
+ name: 'PLAYER_X',
+ score: 85420
+ }, {
+ name: 'HERO_MASTER',
+ score: 72350
+ }, {
+ name: 'FUSION_KING',
+ score: 68900
+ }, {
+ name: 'ACE_GAMER',
+ score: 55670
+ }];
+ // Add current player's best score to leaderboard
+ var playerBestScore = storage.bestScore || 0;
+ if (playerBestScore > 0) {
+ leaderboardData.push({
+ name: 'YOU',
+ score: playerBestScore
+ });
+ // Sort by score descending
+ leaderboardData.sort(function (a, b) {
+ return b.score - a.score;
+ });
+ // Keep only top 5
+ leaderboardData = leaderboardData.slice(0, 5);
+ }
+ // Display leaderboard entries
+ var _loop = function _loop() {
+ entry = leaderboardData[i];
+ rankText = i + 1 + '. ' + entry.name + ': ' + entry.score;
+ entryColor = entry.name === 'YOU' ? 0xFFD700 : entry.name === 'KEMALDEV' ? 0xFF0000 : 0xFFFFFF;
+ leaderboardEntry = new Text2(rankText, {
+ size: 50,
+ fill: entryColor
+ });
+ leaderboardEntry.anchor.set(0.5, 0.5);
+ leaderboardEntry.x = 2048 / 2;
+ leaderboardEntry.y = 1450 + i * 60;
+ menuContainer.addChild(leaderboardEntry);
+ // Add pulsing effect to player's score
+ if (entry.name === 'YOU') {
+ var _pulsePlayerScore = function pulsePlayerScore(textObj) {
+ tween(textObj, {
+ scaleX: 1.1,
+ scaleY: 1.1
+ }, {
+ duration: 800,
+ easing: tween.easeInOut,
+ onFinish: function onFinish() {
+ tween(textObj, {
+ scaleX: 1,
+ scaleY: 1
+ }, {
+ duration: 800,
+ easing: tween.easeInOut,
+ onFinish: function onFinish() {
+ _pulsePlayerScore(textObj);
+ }
+ });
+ }
+ });
+ };
+ _pulsePlayerScore(leaderboardEntry);
+ }
+ },
+ entry,
+ rankText,
+ entryColor,
+ leaderboardEntry;
+ for (var i = 0; i < leaderboardData.length; i++) {
+ _loop();
+ }
// Win count display with neon styling
var totalWins = storage.totalWins || 0;
var winCountText = new Text2('WINS: ' + totalWins, {
- size: 100,
+ size: 80,
fill: 0xFF00FF
});
winCountText.anchor.set(0.5, 0.5);
winCountText.x = 2048 / 2;
- winCountText.y = 1450;
+ winCountText.y = 1800;
menuContainer.addChild(winCountText);
// Add neon glow animation to win count
function pulseWinCount() {
tween(winCountText, {
@@ -426,9 +512,9 @@
scaleX: 4,
scaleY: 1.5
});
startButton.x = 2048 / 2;
- startButton.y = 1650;
+ startButton.y = 2000;
startButton.tint = 0x003333;
startButton.alpha = 0.9;
menuContainer.addChild(startButton);
// Button border effect
@@ -438,9 +524,9 @@
scaleX: 4.2,
scaleY: 1.7
});
buttonBorder.x = 2048 / 2;
- buttonBorder.y = 1650;
+ buttonBorder.y = 2000;
buttonBorder.tint = 0x00FFFF;
buttonBorder.alpha = 0.7;
menuContainer.addChild(buttonBorder);
menuContainer.addChild(startButton); // Re-add to put on top
@@ -449,9 +535,9 @@
fill: 0x00FFFF
});
startButtonText.anchor.set(0.5, 0.5);
startButtonText.x = 2048 / 2;
- startButtonText.y = 1650;
+ startButtonText.y = 2000;
menuContainer.addChild(startButtonText);
// Button interaction with neon effects
startButton.down = function () {
tween(startButton, {
@@ -676,8 +762,13 @@
duration: 800,
easing: tween.easeIn
});
}
+ // Update best score in storage before game over
+ var currentScore = LK.getScore();
+ if (!storage.bestScore || currentScore > storage.bestScore) {
+ storage.bestScore = currentScore;
+ }
LK.setTimeout(function () {
LK.showGameOver();
}, 1000);
}
@@ -795,8 +886,13 @@
// Check for win condition (tier 9 hero created)
if (newHero.tier >= 9) {
// Increment win count in storage
storage.totalWins = (storage.totalWins || 0) + 1;
+ // Update best score in storage
+ var currentScore = LK.getScore();
+ if (!storage.bestScore || currentScore > storage.bestScore) {
+ storage.bestScore = currentScore;
+ }
// Add special rainbow effect for max tier hero
var rainbowCycle = function rainbowCycle() {
var colors = [0xFF0000, 0xFF8000, 0xFFFF00, 0x00FF00, 0x0080FF, 0x8000FF];
var colorIndex = 0;
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