User prompt
7 mucize ekle
User prompt
0.7 snde bir olsun
User prompt
erdo gidince 15 sn boyunca kalkan extradan 3lü patlayan mermi 5li normal mermiyi 0.2 snde bir atar ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
erdo ile canlan çalışmıyo yine ölüyorum tekrar oyna yazıyo ama altında canlan tuşu yok bide erdo diye varlıklarda nesne yok
User prompt
sadece düşmanlara ateş etcek erdo yoksa oyun kasıyo ama her canlıya aynı anda bide tekrar oynanın altında erdo varken ölmeme rağmen canlan tuşu yok onu ekle
User prompt
erdo bi karakter olacak canın azalınca rasgele bi yönden ortaya doğru hareket edip ortada tüm düşmanlara aynı anada 15 sn boyunca çok hızlı mermi yağdırcak ölürsen ve erdo var ise tekrar oynanın altına erdo ile canlana basıp hayata tam can ile dönersin yeniden canlanırken dev bi patlama yaparsın etrafındakilerin canı azalır ve 8 sn donarlar sende 5li mermi atarsın ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Erdo diye yardımcı karakter ekle canın azken gelir ve her yöne çok hızlı mermi fırlatır
User prompt
daha çok spawn olsunlar ve daha çok kan daha çok vahşet ve daha çok boss ve omega ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
kan izleri ekle ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
oyuna kan ekle
User prompt
Please fix the bug: 'HeroBase is not defined' in or related to this line: 'heroBase = game.addChild(new HeroBase());' Line Number: 1742
User prompt
o baseyi kaldır ve yeni hayvanlar ve yeni 6 mucize ekle
User prompt
baseye girince menü açılıyo ve oyun donuyo menüye dair herşeyi yok et dedim
User prompt
AMAAAAN MENÜYÜ KALDIR GİTSİN
User prompt
menü açıkken hareket kapansın oyun dursun sadece menüden birini seçince devam etsin
User prompt
menü tüm ekranı kaplasın ve çalışsın lütfen
User prompt
Please fix the bug: 'Uncaught TypeError: Cannot read properties of undefined (reading 'toGlobal')' in or related to this line: 'var localPos = self.toLocal(obj.parent.toGlobal(obj.position));' Line Number: 151
User prompt
baseye girince bi menü açılsın o menüden seçtiğimiz hayvan türünü 1 dk liğine kontrol edip kendi türlerine düşman etme ekle yeni hayvanlar ve omege hayvanlar ekle bossun olduğu levelleri arttır ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
daha da güçlendir hayvanları ama daha çok mucize ekle zman mucizesi vb. ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
hipertavuk artık boss olacak skor 1000 küsürlerde gelcek canı çok olacak bide base yap bizim basemiz orası güvenli orda hayvanlar akumayabileceğimizz çıkabilirca basen bize destek olup hayvanlara saldıracaklar ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
hiper hayvan ekle hiperşarj ekle yeni mucizeler ekle ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
geliştir oyunu yeni miraculouslar yeni tip hayvanlar civciv yılan fare vb.
Code edit (1 edits merged)
Please save this source code
User prompt
Miraculous Farm Defense
Initial prompt
3d oyun yap fps oyunu koyun inek tavuk gibi düşmanlarla savaşıyoz muzize uğur böceğindeki mucizeleri kullanıyoruz veya hayvanları öldürerek elde ediyoruz
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ var Bullet = Container.expand(function () { var self = Container.call(this); var bulletGraphics = self.attachAsset('bullet', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 8; self.damage = 25; self.targetX = 0; self.targetY = 0; self.directionX = 0; self.directionY = 0; self.setTarget = function (x, y) { self.targetX = x; self.targetY = y; var dx = x - self.x; var dy = y - self.y; var distance = Math.sqrt(dx * dx + dy * dy); if (distance > 0) { self.directionX = dx / distance; self.directionY = dy / distance; } }; self.update = function () { self.x += self.directionX * self.speed; self.y += self.directionY * self.speed; }; return self; }); var Enemy = Container.expand(function (type) { var self = Container.call(this); self.type = type || 'sheep'; self.speed = 1; self.damage = 10; self.health = 30; self.maxHealth = 30; var enemyGraphics; if (self.type === 'sheep') { enemyGraphics = self.attachAsset('sheep', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 1; self.damage = 10; self.health = 30; self.maxHealth = 30; } else if (self.type === 'cow') { enemyGraphics = self.attachAsset('cow', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 0.7; self.damage = 20; self.health = 60; self.maxHealth = 60; } else if (self.type === 'chicken') { enemyGraphics = self.attachAsset('chicken', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 1.5; self.damage = 5; self.health = 15; self.maxHealth = 15; } else if (self.type === 'chick') { enemyGraphics = self.attachAsset('chick', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 2.5; self.damage = 3; self.health = 8; self.maxHealth = 8; } else if (self.type === 'snake') { enemyGraphics = self.attachAsset('snake', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 1.2; self.damage = 15; self.health = 25; self.maxHealth = 25; self.zigzagTimer = 0; self.zigzagDirection = 1; } else if (self.type === 'mouse') { enemyGraphics = self.attachAsset('mouse', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 3; self.damage = 4; self.health = 12; self.maxHealth = 12; self.jumpTimer = 0; self.isJumping = false; } else if (self.type === 'hyperSheep') { enemyGraphics = self.attachAsset('hyperSheep', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 2.5; self.damage = 25; self.health = 80; self.maxHealth = 80; self.chargeTimer = 0; self.isCharging = false; } else if (self.type === 'hyperCow') { enemyGraphics = self.attachAsset('hyperCow', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 1.5; self.damage = 40; self.health = 120; self.maxHealth = 120; self.rageMode = false; self.rageDuration = 0; } else if (self.type === 'hyperChicken') { enemyGraphics = self.attachAsset('hyperChicken', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 3; self.damage = 15; self.health = 40; self.maxHealth = 40; self.flightTimer = 0; self.isFlying = false; } self.takeDamage = function (damage) { self.health -= damage; // Flash red when hit tween(enemyGraphics, { tint: 0xff0000 }, { duration: 100 }); tween(enemyGraphics, { tint: 0xffffff }, { duration: 100 }); if (self.health <= 0) { return true; // Enemy died } return false; }; self.update = function () { // Move towards hero var dx = hero.x - self.x; var dy = hero.y - self.y; var distance = Math.sqrt(dx * dx + dy * dy); if (distance > 0) { if (self.type === 'snake') { // Snake moves in zigzag pattern self.zigzagTimer++; if (self.zigzagTimer > 20) { self.zigzagDirection *= -1; self.zigzagTimer = 0; } var zigzagOffset = self.zigzagDirection * 30; self.x += dx / distance * self.speed + zigzagOffset * 0.02; self.y += dy / distance * self.speed; } else if (self.type === 'mouse') { // Mouse jumps towards hero self.jumpTimer++; if (self.jumpTimer > 40 && !self.isJumping) { self.isJumping = true; self.jumpTimer = 0; // Quick jump movement tween(self, { x: self.x + dx / distance * self.speed * 8, y: self.y + dy / distance * self.speed * 8 }, { duration: 300, onComplete: function onComplete() { self.isJumping = false; } }); } else if (!self.isJumping) { // Slow movement when not jumping self.x += dx / distance * (self.speed * 0.3); self.y += dy / distance * (self.speed * 0.3); } } else if (self.type === 'hyperSheep') { // HyperSheep charges at hero periodically self.chargeTimer++; if (self.chargeTimer > 60 && !self.isCharging) { self.isCharging = true; self.chargeTimer = 0; // Charge attack with visual effect tween(enemyGraphics, { tint: 0xff0000 }, { duration: 200 }); tween(self, { x: self.x + dx / distance * self.speed * 12, y: self.y + dy / distance * self.speed * 12 }, { duration: 500, onFinish: function onFinish() { self.isCharging = false; tween(enemyGraphics, { tint: 0xffffff }, { duration: 200 }); } }); } else if (!self.isCharging) { self.x += dx / distance * self.speed; self.y += dy / distance * self.speed; } } else if (self.type === 'hyperCow') { // HyperCow enters rage mode when low health if (self.health <= self.maxHealth * 0.3 && !self.rageMode) { self.rageMode = true; self.rageDuration = 5000; self.speed *= 2; self.damage *= 1.5; tween(enemyGraphics, { tint: 0xff4400 }, { duration: 300 }); } if (self.rageMode) { self.rageDuration -= 16.67; if (self.rageDuration <= 0) { self.rageMode = false; self.speed /= 2; self.damage /= 1.5; tween(enemyGraphics, { tint: 0xffffff }, { duration: 300 }); } } self.x += dx / distance * self.speed; self.y += dy / distance * self.speed; } else if (self.type === 'hyperChicken') { // HyperChicken flies in aerial patterns self.flightTimer++; if (self.flightTimer > 120 && !self.isFlying) { self.isFlying = true; self.flightTimer = 0; // Aerial dive attack tween(self, { x: hero.x, y: hero.y - 100 }, { duration: 800, onFinish: function onFinish() { tween(self, { x: hero.x, y: hero.y }, { duration: 400, onFinish: function onFinish() { self.isFlying = false; } }); } }); } else if (!self.isFlying) { // Circle around hero var angle = Math.atan2(dy, dx) + Math.sin(LK.ticks * 0.05) * 0.5; self.x += Math.cos(angle) * self.speed; self.y += Math.sin(angle) * self.speed; } } else { // Normal movement for other enemies self.x += dx / distance * self.speed; self.y += dy / distance * self.speed; } } }; return self; }); var Hero = Container.expand(function () { var self = Container.call(this); var heroGraphics = self.attachAsset('hero', { anchorX: 0.5, anchorY: 0.5 }); self.maxHealth = 100; self.health = self.maxHealth; self.speed = 4; self.normalSpeed = 4; self.boostedSpeed = 8; self.hasShield = false; self.shieldDuration = 0; self.rapidFire = false; self.rapidFireDuration = 0; self.lastShot = 0; self.shootCooldown = 300; // milliseconds self.normalShootCooldown = 300; self.rapidShootCooldown = 100; self.hyperchargeMode = false; self.hyperhargeDuration = 0; self.invisibilityMode = false; self.invisibilityDuration = 0; self.multiShotMode = false; self.multiShotDuration = 0; var shieldGraphics = self.attachAsset('shieldEffect', { anchorX: 0.5, anchorY: 0.5, alpha: 0.5 }); shieldGraphics.visible = false; self.takeDamage = function (damage) { if (self.hasShield) { return false; // No damage taken } self.health -= damage; if (self.health <= 0) { self.health = 0; return true; // Hero died } return false; }; self.activateShield = function () { self.hasShield = true; self.shieldDuration = 5000; // 5 seconds shieldGraphics.visible = true; LK.getSound('powerUp').play(); }; self.activateSpeedBoost = function () { self.speed = self.boostedSpeed; LK.getSound('powerUp').play(); LK.setTimeout(function () { self.speed = self.normalSpeed; }, 3000); }; self.activateRapidFire = function () { self.rapidFire = true; self.rapidFireDuration = 4000; // 4 seconds self.shootCooldown = self.rapidShootCooldown; LK.getSound('powerUp').play(); }; self.activateFreeze = function () { freezeEnemies(); LK.getSound('powerUp').play(); }; self.activateExplosion = function () { explodeNearbyEnemies(); LK.getSound('powerUp').play(); }; self.activateHealing = function () { self.health = Math.min(self.health + 30, self.maxHealth); LK.getSound('powerUp').play(); }; self.activateHypercharge = function () { self.hyperchargeMode = true; self.hyperhargeDuration = 8000; // 8 seconds self.speed = self.boostedSpeed * 1.5; self.shootCooldown = 50; // Very fast shooting heroGraphics.tint = 0xffff00; // Yellow tint LK.getSound('hypercharge').play(); }; self.activateTeleport = function () { // Teleport to random safe location var safeX = Math.random() * (2048 - 160) + 80; var safeY = Math.random() * (2732 - 160) + 80; tween(self, { x: safeX, y: safeY }, { duration: 100 }); LK.getSound('teleport').play(); }; self.activateInvisibility = function () { self.invisibilityMode = true; self.invisibilityDuration = 5000; // 5 seconds heroGraphics.alpha = 0.3; LK.getSound('powerUp').play(); }; self.activateMultiShot = function () { self.multiShotMode = true; self.multiShotDuration = 6000; // 6 seconds LK.getSound('powerUp').play(); }; self.update = function () { if (self.shieldDuration > 0) { self.shieldDuration -= 16.67; // Approximately 60fps if (self.shieldDuration <= 0) { self.hasShield = false; shieldGraphics.visible = false; } } if (self.rapidFireDuration > 0) { self.rapidFireDuration -= 16.67; if (self.rapidFireDuration <= 0) { self.rapidFire = false; self.shootCooldown = self.normalShootCooldown; } } if (self.hyperhargeDuration > 0) { self.hyperhargeDuration -= 16.67; if (self.hyperhargeDuration <= 0) { self.hyperchargeMode = false; self.speed = self.normalSpeed; self.shootCooldown = self.normalShootCooldown; heroGraphics.tint = 0xffffff; } } if (self.invisibilityDuration > 0) { self.invisibilityDuration -= 16.67; if (self.invisibilityDuration <= 0) { self.invisibilityMode = false; heroGraphics.alpha = 1.0; } } if (self.multiShotDuration > 0) { self.multiShotDuration -= 16.67; if (self.multiShotDuration <= 0) { self.multiShotMode = false; } } }; return self; }); var MiracleToken = Container.expand(function () { var self = Container.call(this); var tokenGraphics; self.type = 'speed'; // speed, shield, rapidFire, freeze, explosion, healing self.bobOffset = Math.random() * Math.PI * 2; self.startY = 0; self.setTokenType = function (type) { self.type = type; if (type === 'freeze') { tokenGraphics = self.attachAsset('freezeToken', { anchorX: 0.5, anchorY: 0.5 }); } else if (type === 'explosion') { tokenGraphics = self.attachAsset('explosionToken', { anchorX: 0.5, anchorY: 0.5 }); } else if (type === 'healing') { tokenGraphics = self.attachAsset('healingToken', { anchorX: 0.5, anchorY: 0.5 }); } else if (type === 'hypercharge') { tokenGraphics = self.attachAsset('hyperchargeToken', { anchorX: 0.5, anchorY: 0.5 }); } else if (type === 'teleport') { tokenGraphics = self.attachAsset('teleportToken', { anchorX: 0.5, anchorY: 0.5 }); } else if (type === 'invisibility') { tokenGraphics = self.attachAsset('invisibilityToken', { anchorX: 0.5, anchorY: 0.5 }); } else if (type === 'multiShot') { tokenGraphics = self.attachAsset('multiShotToken', { anchorX: 0.5, anchorY: 0.5 }); } else { tokenGraphics = self.attachAsset('miracleToken', { anchorX: 0.5, anchorY: 0.5 }); } }; // Initialize with default token self.setTokenType('speed'); self.update = function () { // Bobbing animation self.y = self.startY + Math.sin(LK.ticks * 0.1 + self.bobOffset) * 10; // Rotate tokenGraphics.rotation += 0.05; }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x228B22 // Forest green background }); /**** * Game Code ****/ // Sound effects // UI elements // Projectiles and power-ups // Farm animal enemies // Hero character // Game state variables var hero; var enemies = []; var bullets = []; var miracleTokens = []; var gameState = 'playing'; // playing, gameOver var currentWave = 1; var enemiesInWave = 3; var enemiesSpawned = 0; var waveSpawnTimer = 0; var nextWaveTimer = 0; var miracleTokenCount = 0; var lastAutoShoot = 0; var dragNode = null; var frozenEnemies = []; var freezeDuration = 0; // UI elements var healthBar; var healthBarBg; var scoreTxt; var waveTxt; var miracleCountTxt; // Initialize UI function initializeUI() { // Health bar background healthBarBg = LK.getAsset('healthBar', { anchorX: 0, anchorY: 0, tint: 0x444444, width: 220, height: 25 }); // Health bar healthBar = LK.getAsset('healthBar', { anchorX: 0, anchorY: 0, width: 200, height: 20 }); LK.gui.topLeft.addChild(healthBarBg); LK.gui.topLeft.addChild(healthBar); healthBarBg.x = 120; healthBarBg.y = 20; healthBar.x = 130; healthBar.y = 25; // Score text scoreTxt = new Text2('Score: 0', { size: 60, fill: 0xFFFFFF }); scoreTxt.anchor.set(0.5, 0); LK.gui.top.addChild(scoreTxt); // Wave text waveTxt = new Text2('Wave: 1', { size: 50, fill: 0xFFFF00 }); waveTxt.anchor.set(1, 0); LK.gui.topRight.addChild(waveTxt); waveTxt.x = -20; waveTxt.y = 20; // Miracle token count miracleCountTxt = new Text2('Miracles: 0', { size: 45, fill: 0xFFD700 }); miracleCountTxt.anchor.set(1, 0); LK.gui.topRight.addChild(miracleCountTxt); miracleCountTxt.x = -20; miracleCountTxt.y = 80; } // Initialize hero function initializeHero() { hero = game.addChild(new Hero()); hero.x = 2048 / 2; hero.y = 2732 / 2; } // Spawn enemy function spawnEnemy() { var enemy; var rand = Math.random(); if (currentWave <= 2) { enemy = new Enemy('sheep'); } else if (currentWave <= 4) { if (rand < 0.7) { enemy = new Enemy('sheep'); } else { enemy = new Enemy('chicken'); } } else { if (rand < 0.15) { enemy = new Enemy('sheep'); } else if (rand < 0.25) { enemy = new Enemy('chicken'); } else if (rand < 0.35) { enemy = new Enemy('cow'); } else if (rand < 0.45) { enemy = new Enemy('chick'); } else if (rand < 0.55) { enemy = new Enemy('snake'); } else if (rand < 0.65) { enemy = new Enemy('mouse'); } else if (rand < 0.75) { enemy = new Enemy('hyperSheep'); } else if (rand < 0.85) { enemy = new Enemy('hyperCow'); } else { enemy = new Enemy('hyperChicken'); } } // Spawn from random edge var side = Math.floor(Math.random() * 4); if (side === 0) { // Top enemy.x = Math.random() * 2048; enemy.y = -50; } else if (side === 1) { // Right enemy.x = 2048 + 50; enemy.y = Math.random() * 2732; } else if (side === 2) { // Bottom enemy.x = Math.random() * 2048; enemy.y = 2732 + 50; } else { // Left enemy.x = -50; enemy.y = Math.random() * 2732; } enemies.push(enemy); game.addChild(enemy); } // Create bullet towards nearest enemy function shootAtNearestEnemy() { if (enemies.length === 0) return; var nearestEnemy = null; var nearestDistance = Infinity; for (var i = 0; i < enemies.length; i++) { var enemy = enemies[i]; var dx = enemy.x - hero.x; var dy = enemy.y - hero.y; var distance = Math.sqrt(dx * dx + dy * dy); if (distance < nearestDistance) { nearestDistance = distance; nearestEnemy = enemy; } } if (nearestEnemy) { if (hero.multiShotMode) { // Fire 3 bullets in spread pattern for (var i = -1; i <= 1; i++) { var bullet = new Bullet(); bullet.x = hero.x; bullet.y = hero.y; var angle = Math.atan2(nearestEnemy.y - hero.y, nearestEnemy.x - hero.x) + i * 0.3; var targetX = hero.x + Math.cos(angle) * 500; var targetY = hero.y + Math.sin(angle) * 500; bullet.setTarget(targetX, targetY); bullets.push(bullet); game.addChild(bullet); } } else { var bullet = new Bullet(); bullet.x = hero.x; bullet.y = hero.y; bullet.setTarget(nearestEnemy.x, nearestEnemy.y); bullets.push(bullet); game.addChild(bullet); } LK.getSound('shoot').play(); } } // Create miracle token function createMiracleToken(x, y) { var token = new MiracleToken(); token.x = x; token.y = y; token.startY = y; var rand = Math.random(); if (rand < 0.12) { token.setTokenType('speed'); } else if (rand < 0.22) { token.setTokenType('shield'); } else if (rand < 0.32) { token.setTokenType('rapidFire'); } else if (rand < 0.42) { token.setTokenType('freeze'); } else if (rand < 0.52) { token.setTokenType('explosion'); } else if (rand < 0.62) { token.setTokenType('healing'); } else if (rand < 0.72) { token.setTokenType('hypercharge'); } else if (rand < 0.82) { token.setTokenType('teleport'); } else if (rand < 0.92) { token.setTokenType('invisibility'); } else { token.setTokenType('multiShot'); } miracleTokens.push(token); game.addChild(token); } // Freeze all enemies function freezeEnemies() { freezeDuration = 3000; // 3 seconds for (var i = 0; i < enemies.length; i++) { enemies[i].frozenSpeed = enemies[i].speed; enemies[i].speed = 0; enemies[i].isFrozen = true; // Visual effect - tint blue tween(enemies[i], { tint: 0x0088ff }, { duration: 200 }); } } // Explode nearby enemies function explodeNearbyEnemies() { var explosionRadius = 200; for (var i = enemies.length - 1; i >= 0; i--) { var enemy = enemies[i]; var dx = enemy.x - hero.x; var dy = enemy.y - hero.y; var distance = Math.sqrt(dx * dx + dy * dy); if (distance <= explosionRadius) { // Create explosion effect LK.effects.flashObject(enemy, 0xff4400, 300); var enemyDied = enemy.takeDamage(50); if (enemyDied) { LK.setScore(LK.getScore() + 10); scoreTxt.setText('Score: ' + LK.getScore()); enemy.destroy(); enemies.splice(i, 1); } } } } // Handle move events function handleMove(x, y, obj) { if (gameState !== 'playing') return; if (dragNode) { // Keep hero within bounds dragNode.x = Math.max(40, Math.min(2048 - 40, x)); dragNode.y = Math.max(40, Math.min(2732 - 40, y)); } } // Touch/mouse events game.move = handleMove; game.down = function (x, y, obj) { if (gameState !== 'playing') return; dragNode = hero; handleMove(x, y, obj); }; game.up = function (x, y, obj) { dragNode = null; }; // Initialize game initializeUI(); initializeHero(); // Main game update loop game.update = function () { if (gameState !== 'playing') return; // Update hero hero.update(); // Update freeze duration if (freezeDuration > 0) { freezeDuration -= 16.67; // Approximately 60fps if (freezeDuration <= 0) { // Unfreeze all enemies for (var i = 0; i < enemies.length; i++) { if (enemies[i].isFrozen) { enemies[i].speed = enemies[i].frozenSpeed; enemies[i].isFrozen = false; // Remove blue tint tween(enemies[i], { tint: 0xffffff }, { duration: 200 }); } } } } // Update health bar var healthPercent = hero.health / hero.maxHealth; healthBar.width = 200 * healthPercent; // Auto shoot if (LK.ticks - lastAutoShoot > hero.shootCooldown / 16.67) { shootAtNearestEnemy(); lastAutoShoot = LK.ticks; } // Wave spawning if (enemiesSpawned < enemiesInWave) { waveSpawnTimer++; if (waveSpawnTimer >= 90) { // Spawn every 1.5 seconds spawnEnemy(); enemiesSpawned++; waveSpawnTimer = 0; } } // Check for next wave if (enemiesSpawned >= enemiesInWave && enemies.length === 0) { nextWaveTimer++; if (nextWaveTimer >= 120) { // 2 second delay currentWave++; enemiesInWave = 3 + currentWave; enemiesSpawned = 0; nextWaveTimer = 0; waveTxt.setText('Wave: ' + currentWave); } } // Update enemies for (var i = enemies.length - 1; i >= 0; i--) { var enemy = enemies[i]; enemy.update(); // Check collision with hero if (enemy.intersects(hero) && !hero.invisibilityMode) { var heroDied = hero.takeDamage(enemy.damage); if (heroDied) { gameState = 'gameOver'; LK.showGameOver(); return; } // Remove enemy after collision enemy.destroy(); enemies.splice(i, 1); LK.effects.flashScreen(0xff0000, 500); continue; } // Remove enemies that are too far off screen if (enemy.x < -200 || enemy.x > 2248 || enemy.y < -200 || enemy.y > 2932) { enemy.destroy(); enemies.splice(i, 1); } } // Update bullets for (var i = bullets.length - 1; i >= 0; i--) { var bullet = bullets[i]; bullet.update(); // Check collision with enemies var hitEnemy = false; for (var j = enemies.length - 1; j >= 0; j--) { var enemy = enemies[j]; if (bullet.intersects(enemy)) { var enemyDied = enemy.takeDamage(bullet.damage); if (enemyDied) { // Create miracle token chance if (Math.random() < 0.3) { // 30% chance createMiracleToken(enemy.x, enemy.y); } LK.setScore(LK.getScore() + 10); scoreTxt.setText('Score: ' + LK.getScore()); enemy.destroy(); enemies.splice(j, 1); LK.getSound('enemyHit').play(); } bullet.destroy(); bullets.splice(i, 1); hitEnemy = true; break; } } if (hitEnemy) continue; // Remove bullets that are off screen if (bullet.x < -50 || bullet.x > 2098 || bullet.y < -50 || bullet.y > 2782) { bullet.destroy(); bullets.splice(i, 1); } } // Update miracle tokens for (var i = miracleTokens.length - 1; i >= 0; i--) { var token = miracleTokens[i]; token.update(); // Check collision with hero if (token.intersects(hero)) { miracleTokenCount++; miracleCountTxt.setText('Miracles: ' + miracleTokenCount); // Activate power-up if (token.type === 'speed') { hero.activateSpeedBoost(); } else if (token.type === 'shield') { hero.activateShield(); } else if (token.type === 'rapidFire') { hero.activateRapidFire(); } else if (token.type === 'freeze') { hero.activateFreeze(); } else if (token.type === 'explosion') { hero.activateExplosion(); } else if (token.type === 'healing') { hero.activateHealing(); } else if (token.type === 'hypercharge') { hero.activateHypercharge(); } else if (token.type === 'teleport') { hero.activateTeleport(); } else if (token.type === 'invisibility') { hero.activateInvisibility(); } else if (token.type === 'multiShot') { hero.activateMultiShot(); } LK.getSound('tokenCollect').play(); token.destroy(); miracleTokens.splice(i, 1); } } };
===================================================================
--- original.js
+++ change.js
@@ -100,8 +100,41 @@
self.health = 12;
self.maxHealth = 12;
self.jumpTimer = 0;
self.isJumping = false;
+ } else if (self.type === 'hyperSheep') {
+ enemyGraphics = self.attachAsset('hyperSheep', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.speed = 2.5;
+ self.damage = 25;
+ self.health = 80;
+ self.maxHealth = 80;
+ self.chargeTimer = 0;
+ self.isCharging = false;
+ } else if (self.type === 'hyperCow') {
+ enemyGraphics = self.attachAsset('hyperCow', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.speed = 1.5;
+ self.damage = 40;
+ self.health = 120;
+ self.maxHealth = 120;
+ self.rageMode = false;
+ self.rageDuration = 0;
+ } else if (self.type === 'hyperChicken') {
+ enemyGraphics = self.attachAsset('hyperChicken', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.speed = 3;
+ self.damage = 15;
+ self.health = 40;
+ self.maxHealth = 40;
+ self.flightTimer = 0;
+ self.isFlying = false;
}
self.takeDamage = function (damage) {
self.health -= damage;
// Flash red when hit
@@ -156,8 +189,96 @@
// Slow movement when not jumping
self.x += dx / distance * (self.speed * 0.3);
self.y += dy / distance * (self.speed * 0.3);
}
+ } else if (self.type === 'hyperSheep') {
+ // HyperSheep charges at hero periodically
+ self.chargeTimer++;
+ if (self.chargeTimer > 60 && !self.isCharging) {
+ self.isCharging = true;
+ self.chargeTimer = 0;
+ // Charge attack with visual effect
+ tween(enemyGraphics, {
+ tint: 0xff0000
+ }, {
+ duration: 200
+ });
+ tween(self, {
+ x: self.x + dx / distance * self.speed * 12,
+ y: self.y + dy / distance * self.speed * 12
+ }, {
+ duration: 500,
+ onFinish: function onFinish() {
+ self.isCharging = false;
+ tween(enemyGraphics, {
+ tint: 0xffffff
+ }, {
+ duration: 200
+ });
+ }
+ });
+ } else if (!self.isCharging) {
+ self.x += dx / distance * self.speed;
+ self.y += dy / distance * self.speed;
+ }
+ } else if (self.type === 'hyperCow') {
+ // HyperCow enters rage mode when low health
+ if (self.health <= self.maxHealth * 0.3 && !self.rageMode) {
+ self.rageMode = true;
+ self.rageDuration = 5000;
+ self.speed *= 2;
+ self.damage *= 1.5;
+ tween(enemyGraphics, {
+ tint: 0xff4400
+ }, {
+ duration: 300
+ });
+ }
+ if (self.rageMode) {
+ self.rageDuration -= 16.67;
+ if (self.rageDuration <= 0) {
+ self.rageMode = false;
+ self.speed /= 2;
+ self.damage /= 1.5;
+ tween(enemyGraphics, {
+ tint: 0xffffff
+ }, {
+ duration: 300
+ });
+ }
+ }
+ self.x += dx / distance * self.speed;
+ self.y += dy / distance * self.speed;
+ } else if (self.type === 'hyperChicken') {
+ // HyperChicken flies in aerial patterns
+ self.flightTimer++;
+ if (self.flightTimer > 120 && !self.isFlying) {
+ self.isFlying = true;
+ self.flightTimer = 0;
+ // Aerial dive attack
+ tween(self, {
+ x: hero.x,
+ y: hero.y - 100
+ }, {
+ duration: 800,
+ onFinish: function onFinish() {
+ tween(self, {
+ x: hero.x,
+ y: hero.y
+ }, {
+ duration: 400,
+ onFinish: function onFinish() {
+ self.isFlying = false;
+ }
+ });
+ }
+ });
+ } else if (!self.isFlying) {
+ // Circle around hero
+ var angle = Math.atan2(dy, dx) + Math.sin(LK.ticks * 0.05) * 0.5;
+ self.x += Math.cos(angle) * self.speed;
+ self.y += Math.sin(angle) * self.speed;
+ }
} else {
// Normal movement for other enemies
self.x += dx / distance * self.speed;
self.y += dy / distance * self.speed;
@@ -184,8 +305,14 @@
self.lastShot = 0;
self.shootCooldown = 300; // milliseconds
self.normalShootCooldown = 300;
self.rapidShootCooldown = 100;
+ self.hyperchargeMode = false;
+ self.hyperhargeDuration = 0;
+ self.invisibilityMode = false;
+ self.invisibilityDuration = 0;
+ self.multiShotMode = false;
+ self.multiShotDuration = 0;
var shieldGraphics = self.attachAsset('shieldEffect', {
anchorX: 0.5,
anchorY: 0.5,
alpha: 0.5
@@ -232,8 +359,39 @@
self.activateHealing = function () {
self.health = Math.min(self.health + 30, self.maxHealth);
LK.getSound('powerUp').play();
};
+ self.activateHypercharge = function () {
+ self.hyperchargeMode = true;
+ self.hyperhargeDuration = 8000; // 8 seconds
+ self.speed = self.boostedSpeed * 1.5;
+ self.shootCooldown = 50; // Very fast shooting
+ heroGraphics.tint = 0xffff00; // Yellow tint
+ LK.getSound('hypercharge').play();
+ };
+ self.activateTeleport = function () {
+ // Teleport to random safe location
+ var safeX = Math.random() * (2048 - 160) + 80;
+ var safeY = Math.random() * (2732 - 160) + 80;
+ tween(self, {
+ x: safeX,
+ y: safeY
+ }, {
+ duration: 100
+ });
+ LK.getSound('teleport').play();
+ };
+ self.activateInvisibility = function () {
+ self.invisibilityMode = true;
+ self.invisibilityDuration = 5000; // 5 seconds
+ heroGraphics.alpha = 0.3;
+ LK.getSound('powerUp').play();
+ };
+ self.activateMultiShot = function () {
+ self.multiShotMode = true;
+ self.multiShotDuration = 6000; // 6 seconds
+ LK.getSound('powerUp').play();
+ };
self.update = function () {
if (self.shieldDuration > 0) {
self.shieldDuration -= 16.67; // Approximately 60fps
if (self.shieldDuration <= 0) {
@@ -247,8 +405,30 @@
self.rapidFire = false;
self.shootCooldown = self.normalShootCooldown;
}
}
+ if (self.hyperhargeDuration > 0) {
+ self.hyperhargeDuration -= 16.67;
+ if (self.hyperhargeDuration <= 0) {
+ self.hyperchargeMode = false;
+ self.speed = self.normalSpeed;
+ self.shootCooldown = self.normalShootCooldown;
+ heroGraphics.tint = 0xffffff;
+ }
+ }
+ if (self.invisibilityDuration > 0) {
+ self.invisibilityDuration -= 16.67;
+ if (self.invisibilityDuration <= 0) {
+ self.invisibilityMode = false;
+ heroGraphics.alpha = 1.0;
+ }
+ }
+ if (self.multiShotDuration > 0) {
+ self.multiShotDuration -= 16.67;
+ if (self.multiShotDuration <= 0) {
+ self.multiShotMode = false;
+ }
+ }
};
return self;
});
var MiracleToken = Container.expand(function () {
@@ -273,8 +453,28 @@
tokenGraphics = self.attachAsset('healingToken', {
anchorX: 0.5,
anchorY: 0.5
});
+ } else if (type === 'hypercharge') {
+ tokenGraphics = self.attachAsset('hyperchargeToken', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ } else if (type === 'teleport') {
+ tokenGraphics = self.attachAsset('teleportToken', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ } else if (type === 'invisibility') {
+ tokenGraphics = self.attachAsset('invisibilityToken', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ } else if (type === 'multiShot') {
+ tokenGraphics = self.attachAsset('multiShotToken', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
} else {
tokenGraphics = self.attachAsset('miracleToken', {
anchorX: 0.5,
anchorY: 0.5
@@ -396,20 +596,26 @@
} else {
enemy = new Enemy('chicken');
}
} else {
- if (rand < 0.25) {
+ if (rand < 0.15) {
enemy = new Enemy('sheep');
- } else if (rand < 0.4) {
+ } else if (rand < 0.25) {
enemy = new Enemy('chicken');
- } else if (rand < 0.55) {
+ } else if (rand < 0.35) {
enemy = new Enemy('cow');
- } else if (rand < 0.7) {
+ } else if (rand < 0.45) {
enemy = new Enemy('chick');
- } else if (rand < 0.85) {
+ } else if (rand < 0.55) {
enemy = new Enemy('snake');
- } else {
+ } else if (rand < 0.65) {
enemy = new Enemy('mouse');
+ } else if (rand < 0.75) {
+ enemy = new Enemy('hyperSheep');
+ } else if (rand < 0.85) {
+ enemy = new Enemy('hyperCow');
+ } else {
+ enemy = new Enemy('hyperChicken');
}
}
// Spawn from random edge
var side = Math.floor(Math.random() * 4);
@@ -448,14 +654,29 @@
nearestEnemy = enemy;
}
}
if (nearestEnemy) {
- var bullet = new Bullet();
- bullet.x = hero.x;
- bullet.y = hero.y;
- bullet.setTarget(nearestEnemy.x, nearestEnemy.y);
- bullets.push(bullet);
- game.addChild(bullet);
+ if (hero.multiShotMode) {
+ // Fire 3 bullets in spread pattern
+ for (var i = -1; i <= 1; i++) {
+ var bullet = new Bullet();
+ bullet.x = hero.x;
+ bullet.y = hero.y;
+ var angle = Math.atan2(nearestEnemy.y - hero.y, nearestEnemy.x - hero.x) + i * 0.3;
+ var targetX = hero.x + Math.cos(angle) * 500;
+ var targetY = hero.y + Math.sin(angle) * 500;
+ bullet.setTarget(targetX, targetY);
+ bullets.push(bullet);
+ game.addChild(bullet);
+ }
+ } else {
+ var bullet = new Bullet();
+ bullet.x = hero.x;
+ bullet.y = hero.y;
+ bullet.setTarget(nearestEnemy.x, nearestEnemy.y);
+ bullets.push(bullet);
+ game.addChild(bullet);
+ }
LK.getSound('shoot').play();
}
}
// Create miracle token
@@ -464,20 +685,28 @@
token.x = x;
token.y = y;
token.startY = y;
var rand = Math.random();
- if (rand < 0.2) {
+ if (rand < 0.12) {
token.setTokenType('speed');
- } else if (rand < 0.35) {
+ } else if (rand < 0.22) {
token.setTokenType('shield');
- } else if (rand < 0.5) {
+ } else if (rand < 0.32) {
token.setTokenType('rapidFire');
- } else if (rand < 0.65) {
+ } else if (rand < 0.42) {
token.setTokenType('freeze');
- } else if (rand < 0.8) {
+ } else if (rand < 0.52) {
token.setTokenType('explosion');
- } else {
+ } else if (rand < 0.62) {
token.setTokenType('healing');
+ } else if (rand < 0.72) {
+ token.setTokenType('hypercharge');
+ } else if (rand < 0.82) {
+ token.setTokenType('teleport');
+ } else if (rand < 0.92) {
+ token.setTokenType('invisibility');
+ } else {
+ token.setTokenType('multiShot');
}
miracleTokens.push(token);
game.addChild(token);
}
@@ -597,9 +826,9 @@
for (var i = enemies.length - 1; i >= 0; i--) {
var enemy = enemies[i];
enemy.update();
// Check collision with hero
- if (enemy.intersects(hero)) {
+ if (enemy.intersects(hero) && !hero.invisibilityMode) {
var heroDied = hero.takeDamage(enemy.damage);
if (heroDied) {
gameState = 'gameOver';
LK.showGameOver();
@@ -672,8 +901,16 @@
} else if (token.type === 'explosion') {
hero.activateExplosion();
} else if (token.type === 'healing') {
hero.activateHealing();
+ } else if (token.type === 'hypercharge') {
+ hero.activateHypercharge();
+ } else if (token.type === 'teleport') {
+ hero.activateTeleport();
+ } else if (token.type === 'invisibility') {
+ hero.activateInvisibility();
+ } else if (token.type === 'multiShot') {
+ hero.activateMultiShot();
}
LK.getSound('tokenCollect').play();
token.destroy();
miracleTokens.splice(i, 1);
mega star. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
bullet. In-Game asset. 2d. High contrast. No shadows
chicken. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
cow but square. In-Game asset. 2d. High contrast. No shadows
sheep but square. In-Game asset. 2d. High contrast. No shadows
star shield. In-Game asset. 2d. High contrast. No shadows
random miracle token. In-Game asset. 2d. High contrast. No shadows
chick. In-Game asset. 2d. High contrast. No shadows
snake but square. In-Game asset. 2d. High contrast. No shadows
donduruculuk gücü veren token. In-Game asset. 2d. High contrast. No shadows
şifa tokeni. In-Game asset. 2d. High contrast. No shadows
bomba token. In-Game asset. 2d. High contrast. No shadows
mause but square. In-Game asset. 2d. High contrast. No shadows
magic eye. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
prickly cube. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
only empty button. In-Game asset. 2d. High contrast. No shadows
hyper chicken but square. In-Game asset. 2d. High contrast. No shadows
no text egg menu. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat