User prompt
Make the mystery box in the same line as the player if the player goes by it the player gets infinite hearts
User prompt
Add mystery box asset the mystery box has infinite hearts
User prompt
Please fix the bug: 'ReferenceError: currentTime is not defined' in or related to this line: 'self.lastAttackTime = currentTime;' Line Number: 111
User prompt
Add a angel asset that is a helper and defend the player from the enemies
User prompt
Prove it by adding five hearts on a top right screen you think you can do that
User prompt
Add five lives
Remix started
Copy Mario: Coin Rush
/****
* Classes
****/
// Angel helper class
var Angel = Container.expand(function () {
var self = Container.call(this);
// Create angel graphics (using particle asset as a placeholder)
var angelGraphics = self.attachAsset('particle', {
anchorX: 0.5,
anchorY: 0.5,
color: 0xFFFFFF // White color for angel
});
// Angel properties
self.zIndex = 25; // Between player (20) and weapon (30)
self.orbitRadius = 150;
self.orbitSpeed = 0.03;
self.orbitAngle = 0;
self.protectionRadius = 200;
self.lastAttackTime = 0;
self.attackCooldown = 1000; // 1 second between attacks
// Update method called every tick
self.update = function () {
// Orbit around player
if (player) {
self.orbitAngle += self.orbitSpeed;
self.x = player.x + Math.cos(self.orbitAngle) * self.orbitRadius;
self.y = player.y + Math.sin(self.orbitAngle) * self.orbitRadius;
// Check for nearby enemies to attack
var currentTime = Date.now();
if (currentTime - self.lastAttackTime > self.attackCooldown) {
// Check all enemy types
self.checkAndAttackEnemies(enemies);
self.checkAndAttackEnemies(flyinEnemies);
self.checkAndAttackEnemies(zigzagEnemies);
}
}
};
// Helper method to check and attack enemies of a specific type
self.checkAndAttackEnemies = function (enemyArray) {
if (!player) return;
for (var i = enemyArray.length - 1; i >= 0; i--) {
var enemy = enemyArray[i];
if (!enemy) continue;
// Calculate distance to enemy
var dx = enemy.x - player.x;
var dy = enemy.y - player.y;
var distance = Math.sqrt(dx * dx + dy * dy);
// If enemy is within protection radius, attack it
if (distance <= self.protectionRadius) {
// Create a particle effect at the enemy's position
var particleEffect = LK.getAsset('particle', {
anchorX: 0.5,
anchorY: 0.5,
color: 0xFFFFFF // White light
});
particleEffect.x = enemy.x;
particleEffect.y = enemy.y;
particleEffect.zIndex = 300;
game.addChild(particleEffect);
// Create a coin if it's a regular enemy or zigzag enemy
if (enemyArray === enemies || enemyArray === zigzagEnemies) {
var coin = new Coin();
coin.x = enemy.x;
coin.y = enemy.y;
coin.velocity = 5;
game.addChild(coin);
coins.push(coin);
}
// Remove the enemy
enemy.destroy();
enemyArray.splice(i, 1);
// Remove particle effect after a short time
LK.setTimeout(function () {
particleEffect.destroy();
}, 150);
// Set last attack time
self.lastAttackTime = Date.now();
break; // Only attack one enemy per cooldown
}
}
};
return self;
});
// Coin class
var Coin = Container.expand(function () {
var self = Container.call(this);
var coinGraphics = self.attachAsset('coin', {
anchorX: 0.5,
anchorY: 0.5
});
self.velocity = gameStartDelay ? 0 : 5;
self.zIndex = 15;
self.update = function () {
if (gameStartDelay) {
self.velocity = 0;
} else if (self.velocity === 0) {
self.velocity = 5;
}
self.x -= self.velocity;
};
});
// NEW: EndlessBG3 class using the same scroll system as background2
var EndlessBG3 = Container.expand(function () {
var self = Container.call(this);
var bg1 = LK.getAsset('endlessbg3', {
anchorX: 0,
anchorY: 0
});
bg1.x = 0;
bg1.y = 0;
self.addChild(bg1);
var bg2 = LK.getAsset('endlessbg3', {
anchorX: 1,
anchorY: 0
});
bg2.scaleX = -1;
bg2.x = bg1.width;
bg2.y = 0;
self.addChild(bg2);
self.speed = 2;
self.update = function () {
bg1.x -= self.speed;
bg2.x -= self.speed;
if (bg1.x + bg1.width <= 0) {
bg1.x = bg2.x + bg2.width;
}
if (bg2.x + bg2.width <= 0) {
bg2.x = bg1.x + bg1.width;
}
};
});
// Enemy class
var Enemy = Container.expand(function () {
var self = Container.call(this);
var enemyGraphics = self.attachAsset('enemy', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = gameStartDelay ? 0 : 5;
self.zIndex = 10;
self.canDamage = true;
self.update = function () {
if (gameStartDelay) {
self.speed = 0;
} else if (self.speed === 0) {
self.speed = 5;
}
self.x -= self.speed;
if (self.x < -50) {
self.destroy();
}
};
});
// FlyinEnemy class
var FlyinEnemy = Container.expand(function () {
var self = Container.call(this);
var flyinEnemyGraphics = self.attachAsset('flyin_enemy', {
anchorX: 0.5,
anchorY: 0
});
self.speed = gameStartDelay ? 0 : 5;
self.zIndex = 10;
self.canDamage = true;
self.homing = false;
self.vx = 0;
self.vy = 0;
self.update = function () {
if (gameStartDelay) {
self.speed = 0;
self.vx = 0;
self.vy = 0;
} else if (self.speed === 0) {
self.speed = 5;
if (self.homing && self.origVx !== undefined && self.origVy !== undefined) {
self.vx = self.origVx;
self.vy = self.origVy;
}
}
if (!self.homing) {
self.x -= self.speed;
if (self.x < -50) {
self.destroy();
}
} else {
if (gameStartDelay) {
// Store original velocities if not already stored
if (self.origVx === undefined && self.origVy === undefined) {
self.origVx = self.vx;
self.origVy = self.vy;
}
}
self.x += self.vx;
self.y += self.vy;
if (self.x < -200 || self.x > 2248 || self.y < -200 || self.y > 2932) {
self.destroy();
}
}
};
});
// MysteryBox class that gives infinite hearts
var MysteryBox = Container.expand(function () {
var self = Container.call(this);
// Using the coin asset with a different color tint
var boxGraphics = self.attachAsset('coin', {
anchorX: 0.5,
anchorY: 0.5
});
// Make it sparkle with a different color
boxGraphics.tint = 0xFF00FF; // Purple/magenta color for mystery
self.zIndex = 15;
self.velocity = gameStartDelay ? 0 : 3; // Move slower than enemies
self.collected = false;
self.rotation = 0;
self.update = function () {
if (gameStartDelay) {
self.velocity = 0;
} else if (self.velocity === 0) {
self.velocity = 3;
}
// Move from right to left
self.x -= self.velocity;
// Rotate the box for visual effect
boxGraphics.rotation += 0.02;
// Check for tubes and align with them if they're in proximity
var alignedWithTube = false;
for (var i = 0; i < game.children.length; i++) {
var child = game.children[i];
if (child instanceof Tube && Math.abs(self.x - child.x) < 100) {
// Align vertically with the tube
self.y = child.y - 50; // Position slightly above the tube
alignedWithTube = true;
break;
}
}
// Only apply floating effect if not aligned with a tube
if (!alignedWithTube) {
// If player exists and not aligned with tube, follow player's y position
if (player) {
// Gradually move toward player's height
var targetY = player.y;
self.y += (targetY - self.y) * 0.05;
} else {
// Add floating effect
self.y += Math.sin(LK.ticks / 15) * 0.5;
}
}
// Remove if off screen
if (self.x < -150) {
self.destroy();
}
};
// Function to grant infinite hearts
self.grantInfiniteHearts = function () {
if (self.collected) return;
self.collected = true;
// Visual effect for collection
var particleEffect = LK.getAsset('particle', {
anchorX: 0.5,
anchorY: 0.5,
color: 0xFF00FF
});
particleEffect.x = self.x;
particleEffect.y = self.y;
particleEffect.zIndex = 300;
game.addChild(particleEffect);
// Create text effect
var infiniteText = new Text2('INFINITE HEARTS!', {
size: 50,
fill: 0xFF00FF
});
infiniteText.anchor.set(0.5, 0.5);
infiniteText.x = self.x;
infiniteText.y = self.y - 80;
infiniteText.zIndex = 300;
game.addChild(infiniteText);
// Restore all hearts
for (var i = 0; i < 5; i++) {
if (i >= hearts.length) {
var heart = LK.getAsset('heart', {
anchorX: 0.5,
anchorY: 0.5
});
LK.gui.topRight.addChild(heart);
heart.x = -50 - i * 110;
heart.y = 55;
hearts.push(heart);
}
}
// Update player's hearts
player.hearts = Infinity;
remainingHearts = Infinity;
// Override loseHeart function to no longer lose hearts
player.loseHeart = function () {
// Flash the screen red to show hit, but don't decrease hearts
LK.effects.flashScreen(0xFF00FF, 750, 0.0001);
};
// Clean up effects after a short time
LK.setTimeout(function () {
particleEffect.destroy();
// Fade out the text
var fadeSteps = 20;
var fadeInterval = LK.setInterval(function () {
infiniteText.alpha -= 1 / fadeSteps;
if (infiniteText.alpha <= 0) {
infiniteText.destroy();
LK.clearInterval(fadeInterval);
}
}, 50);
}, 2000);
// Remove the mystery box
self.destroy();
};
return self;
});
// Player class
var Player = Container.expand(function () {
var self = Container.call(this);
var playerGraphics = self.attachAsset('player', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = gameStartDelay ? 0 : 5;
self.jumpHeight = 40;
self.isJumping = false;
self.velocityY = 0;
self.isFalling = false;
self.fallSpeed = 0;
self.fallAcceleration = gameStartDelay ? 0 : 0.7;
self.fallTargetY = 2732 / 2 - 7;
// Karakterin diğer öğelerin üzerinde görünmesi için yüksek z-index
self.zIndex = 20;
self.hearts = typeof remainingHearts !== 'undefined' ? remainingHearts : 5;
self.update = function () {
self.prevY = self.y;
if (gameStartDelay) {
self.fallAcceleration = 0;
} else if (self.fallAcceleration === 0) {
self.fallAcceleration = 0.7;
}
if (self.isFalling && !gameStartDelay) {
self.y += self.fallSpeed;
self.fallSpeed += self.fallAcceleration;
if (self.y >= self.fallTargetY) {
self.y = self.fallTargetY;
self.isFalling = false;
self.fallSpeed = 0;
game.weaponEnabled = true;
}
}
self.prevY = self.y;
if (self.isJumping && !gameStartDelay) {
self.y += self.velocityY;
self.velocityY += 0.7;
if (self.y >= 2732 / 2 - 3) {
self.y = 2732 / 2 - 9;
self.isJumping = false;
self.velocityY = 0;
}
}
};
self.invulnerable = false;
self.hit = function () {
if (!self.invulnerable) {
self.loseHeart();
self.invulnerable = true;
LK.setTimeout(function () {
self.invulnerable = false;
}, 500);
}
};
self.jump = function () {
if (!self.isJumping) {
self.isJumping = true;
self.velocityY = -self.jumpHeight;
}
};
self.loseHeart = function () {
self.hearts--;
playerDeaths++;
if (playerDeaths === 1 && hearts[0]) {
hearts[0].destroy();
} else if (playerDeaths === 2 && hearts[1]) {
hearts[1].destroy();
} else if (playerDeaths === 3 && hearts[2]) {
hearts[2].destroy();
} else if (playerDeaths === 4 && hearts[3]) {
hearts[3].destroy();
} else if (playerDeaths === 5 && hearts[4]) {
hearts[4].destroy();
}
remainingHearts = self.hearts;
if (hearts.length === 0) {
// Apply score multipliers based on active game states
var finalScore = coinCounter;
// Apply 2x multiplier if control is active
if (game.controlActive) {
finalScore *= 2;
}
// Apply 3x multiplier if yesil1 is active (has 3+ points)
var yesil1Active = false;
for (var i = 0; i < game.children.length; i++) {
var child = game.children[i];
if (child.points && child.points >= 3) {
finalScore *= 3;
break;
}
}
// Make sure LK score system gets updated with the final multiplied score
LK.setScore(finalScore);
for (var i = enemies.length - 1; i >= 0; i--) {
enemies[i].destroy();
enemies.splice(i, 1);
}
for (var i = flyinEnemies.length - 1; i >= 0; i--) {
flyinEnemies[i].destroy();
flyinEnemies.splice(i, 1);
}
for (var i = zigzagEnemies.length - 1; i >= 0; i--) {
zigzagEnemies[i].destroy();
zigzagEnemies.splice(i, 1);
}
for (var i = trainEnemies.length - 1; i >= 0; i--) {
trainEnemies[i].destroy();
trainEnemies.splice(i, 1);
}
for (var i = coins.length - 1; i >= 0; i--) {
coins[i].destroy();
coins.splice(i, 1);
}
self.destroy();
game.weaponEnabled = false;
}
};
});
// ScrollingBackground class
var ScrollingBackground = Container.expand(function () {
var self = Container.call(this);
self.bg1 = LK.getAsset('background', {
anchorX: 0,
anchorY: 0
});
self.bg1.x = 0;
self.bg1.y = 0;
self.addChild(self.bg1);
self.bg2 = LK.getAsset('background', {
anchorX: 1,
anchorY: 0
});
self.bg2.scaleX = -1;
self.bg2.x = self.bg1.width;
self.bg2.y = 0;
self.addChild(self.bg2);
self.speed = gameStartDelay ? 0 : 2;
self.update = function () {
if (gameStartDelay) {
self.speed = 0;
} else if (self.speed === 0) {
self.speed = 2;
}
self.bg1.x -= self.speed;
self.bg2.x -= self.speed;
if (self.bg1.x + self.bg1.width <= 0) {
self.bg1.x = self.bg2.x + self.bg2.width;
}
if (self.bg2.x + self.bg2.width <= 0) {
self.bg2.x = self.bg1.x + self.bg1.width;
}
};
});
// ScrollingBackground2 class
var ScrollingBackground2 = Container.expand(function () {
var self = Container.call(this);
var bg1 = LK.getAsset('background2', {
anchorX: 0,
anchorY: 0
});
bg1.x = 0;
bg1.y = 0;
self.addChild(bg1);
var bg2 = LK.getAsset('background2', {
anchorX: 1,
anchorY: 0
});
bg2.scaleX = -1;
bg2.x = bg1.width;
bg2.y = 0;
self.addChild(bg2);
self.speed = gameStartDelay ? 0 : 2;
self.update = function () {
if (gameStartDelay) {
self.speed = 0;
} else if (self.speed === 0) {
self.speed = 2;
}
bg1.x -= self.speed;
bg2.x -= self.speed;
if (bg1.x + bg1.width <= 0) {
bg1.x = bg2.x + bg2.width;
}
if (bg2.x + bg2.width <= 0) {
bg2.x = bg1.x + bg1.width;
}
};
});
// Tube class
var Tube = Container.expand(function () {
var self = Container.call(this);
var tubeGraphics = self.attachAsset('tup_1', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = gameStartDelay ? 0 : 5;
// Tube'ların arka plan gibi gözükmesi için düşük z-index
self.zIndex = 0;
self.update = function () {
if (gameStartDelay) {
self.speed = 0;
} else if (self.speed === 0) {
self.speed = 5;
}
self.x -= self.speed;
if (self.x < -50) {
self.destroy();
}
};
});
// Tube2 class (yesil_1 3 puandan sonra spawn olacak ve ekranda görünecek)
var Tube2 = Container.expand(function () {
var self = Container.call(this);
var tubeGraphics = self.attachAsset('tube_2', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = gameStartDelay ? 0 : 5;
// Tube2'nin diğer öğelerin üzerinde görünmesi için orta seviyede bir z-index
self.zIndex = 21;
self.update = function () {
if (gameStartDelay) {
self.speed = 0;
} else if (self.speed === 0) {
self.speed = 5;
}
self.x -= self.speed;
if (self.x < -self.width) {
self.destroy();
}
};
});
// Weapon class (Weapon'ın da diğer ön plandaki öğeler arasında gözükmesi için yüksek z-index eklenmiştir)
var Weapon = Container.expand(function () {
var self = Container.call(this);
var weaponGraphics = self.attachAsset('weapon', {
anchorX: 0.5,
anchorY: 0.5
});
// Weapon'ın arka planın üzerinde görünmesi için yüksek z-index
self.zIndex = 30;
self.speed = 40;
self.update = function () {
self.x += self.directionX * self.speed;
self.y += self.directionY * self.speed;
weaponGraphics.rotation += 0.3;
if (Math.abs(game.down.x - self.x) < self.speed && Math.abs(game.down.y - self.y) < self.speed) {
self.destroy();
}
};
});
/****
* Initialize Game
****/
var game = new LK.Game({
width: 2048,
height: 2732,
backgroundColor: 0x000000
});
/****
* Game Code
****/
var control_2 = LK.getAsset('control_2', {
anchorX: 0.5,
anchorY: 0.5
});
/****
* Global Variables & Flags
****/
// Add a flag to prevent spawning and movement during the first 4 seconds
var gameStartDelay = true;
// Add intro image to center of screen
var introImage = LK.getAsset('intro', {
anchorX: 0.5,
anchorY: 0.5
});
introImage.x = 2048 / 2;
introImage.y = 2732 / 2;
introImage.zIndex = 100; // High z-index to display on top
game.addChild(introImage);
LK.setTimeout(function () {
gameStartDelay = false;
// Fade out and remove intro image
var fadeSteps = 20;
var fadeInterval = LK.setInterval(function () {
introImage.alpha -= 1 / fadeSteps;
if (introImage.alpha <= 0) {
introImage.destroy();
LK.clearInterval(fadeInterval);
}
}, 50);
console.log("Game start delay ended - all objects resuming normal speed");
}, 4000); // 4 seconds delay
var endlessbg3SpawnerInterval;
var endlessbg3 = LK.getAsset('endlessbg3', {
anchorX: 0.5,
anchorY: 0.5
});
// Arka plan varlıklarımızın diğer nesnelerin arkasında kalması için düşük z-index
endlessbg3.zIndex = 1;
var cc = LK.getAsset('cc', {
anchorX: 0.5,
anchorY: 0.5
});
cc.x = 2048 / 2;
cc.y = 2732 / 2;
game.addChild(cc);
var startNormalEnemy = true;
var coinCounter = 0;
var flyinEnemies = [];
var zigzagEnemies = [];
var trainEnemies = [];
var playerDeaths = 0;
var hearts = [];
var remainingHearts = 5;
game.controlActive = false;
var coins = [];
var mysteryBoxes = []; // Array to track mystery boxes
var firstControlTriggered = false;
var enemies = [];
var enemySpawnInterval = Math.floor(Math.random() * 100) + 30;
var enemySpawnCounter = 0;
var stopSpawn = false;
game.weaponEnabled = true;
// Function to spawn mystery boxes
function spawnMysteryBox() {
// Don't spawn during intro or when spawning is stopped
if (gameStartDelay || stopSpawn) {
return;
}
// Create a new mystery box
var mysteryBox = new MysteryBox();
// Position it just off the right side of the screen
mysteryBox.x = 2048 + 75;
// Position it at the same height as the player to ensure they can collect it
mysteryBox.y = player ? player.y : 2732 / 2;
// Add to game and tracking array
game.addChild(mysteryBox);
mysteryBoxes.push(mysteryBox);
// Schedule next spawn with a random delay between 20-30 seconds
var nextSpawnDelay = 20000 + Math.random() * 10000;
LK.setTimeout(spawnMysteryBox, nextSpawnDelay);
}
// Start spawning mystery boxes after a delay
LK.setTimeout(spawnMysteryBox, 15000);
//Yeni endlessbg3 spawn fonksiyonu (spawn aralığı 3000ms olarak ayarlandı)
function spawnEndlessBG3() {
// Don't spawn anything when intro is on screen
if (gameStartDelay) {
return;
}
// endlessbg3 varlığını oluşturuyoruz.
var bg3 = LK.getAsset('endlessbg3', {
anchorX: 0.5,
anchorY: 0.5
});
// bg3'ün x konumunu ayarla (sol kenarın ekranın sağ kenarıyla hizalanması için)
bg3.x = game.width + bg3.width / 2;
// bg3'ün y konumunu ayarlayın
bg3.y = 2732 / 2 + 150;
// Arka plan öğesi olarak diğerlerinin altında kalması için z-index düşük
bg3.zIndex = 1;
// Hızı arttırıldı; bg3 son ile eş zamanlı hareket edecek
bg3.speed = 4;
bg3.update = function () {
this.x -= this.speed;
};
game.addChild(bg3);
}
// Spawn aralığını 3000ms yapıyoruz
var spawnInterval = 3000;
var endlessBG3SpawnScheduled = false;
function scheduleNextEndlessBG3() {
if (!gameStartDelay) {
spawnEndlessBG3();
}
LK.setTimeout(scheduleNextEndlessBG3, spawnInterval);
}
/****
* (A) Eski FlyinEnemy Spawn (sağdan sola, homing false)
****/
function spawnFlyinEnemy() {
if (stopSpawn) {
return;
}
var delay = Math.random() * 2000 + 2000;
LK.setTimeout(function () {
if (stopSpawn) {
return;
}
// Only spawn if game start delay is over
if (!gameStartDelay) {
var fe = new FlyinEnemy();
fe.x = 2048;
fe.y = 449;
fe.zIndex = 10;
game.addChild(fe);
flyinEnemies.push(fe);
}
spawnFlyinEnemy();
}, delay);
}
// Start the spawn chain, even during gameStartDelay
spawnFlyinEnemy();
/****
* (B) Wave şeklinde, homing davranışlı FlyinEnemy Spawn
* (Modified to remove top-to-bottom enemy)
****/
function spawnWaveOfFlyinEnemies() {
var spawnPoints = [{
x: 0,
y: 0
}, {
x: 2048,
y: 0
}, {
x: 0,
y: 2732
}, {
x: 2048,
y: 2732
}, {
x: 2048,
y: 1366
}];
// Removed top-to-bottom spawn point (1024, 0)
for (var i = spawnPoints.length - 1; i > 0; i--) {
var j = Math.floor(Math.random() * (i + 1));
var temp = spawnPoints[i];
spawnPoints[i] = spawnPoints[j];
spawnPoints[j] = temp;
}
spawnPoints.forEach(function (point, index) {
LK.setTimeout(function () {
var enemy = new FlyinEnemy();
enemy.homing = true;
enemy.wave = true;
enemy.x = point.x;
enemy.y = point.y;
var dx = player.x - enemy.x;
var dy = player.y - enemy.y;
var distance = Math.sqrt(dx * dx + dy * dy) || 1;
enemy.vx = dx / distance * enemy.speed;
enemy.vy = dy / distance * enemy.speed;
enemy.zIndex = 10;
if (enemy.x < 1024) {
enemy.scaleX = -1;
}
game.addChild(enemy);
flyinEnemies.push(enemy);
}, index * 800);
if (index === spawnPoints.length - 1) {
LK.setTimeout(function () {
spawnFlyinEnemy();
}, 10000);
}
});
}
/****
* Normal Enemy Spawn (sağdan sola, homing false)
****/
game.update = function () {
scrollingBackground.update();
player.update();
if (game.scrollingBg2 && game.scrollingBg2.update) {
game.scrollingBg2.update();
}
for (var t = 0; t < game.children.length; t++) {
var child = game.children[t];
if (child instanceof Tube || child === yesil1) {
child.update();
}
if (child.children) {
for (var c = 0; c < child.children.length; c++) {
var subChild = child.children[c];
if (subChild.update) {
subChild.update();
}
}
}
}
enemySpawnCounter++;
if (startNormalEnemy && !stopSpawn && !gameStartDelay && enemySpawnCounter >= enemySpawnInterval && !(LK.ticks >= 876 && LK.ticks <= 936) && !(LK.ticks >= 1776 && LK.ticks <= 1836) && !(LK.ticks >= 2676 && LK.ticks <= 2736) && !(LK.ticks >= 3576 && LK.ticks <= 3636) && !(LK.ticks >= 4476 && LK.ticks <= 4536) && !(LK.ticks >= 5376 && LK.ticks <= 5436) && !(LK.ticks >= 6276 && LK.ticks <= 6336) && !(LK.ticks >= 7776 && LK.ticks <= 7836)) {
var canSpawn = true;
for (var i = 0; i < enemies.length; i++) {
if (enemies[i].x > 1800) {
canSpawn = false;
break;
}
}
if (canSpawn) {
var tubeCollision = false;
for (var t = 0; t < game.children.length; t++) {
var child = game.children[t];
if (child.asset && child.asset.name === 'tup_1') {
var enemyRight = 2048 + 75;
var enemyLeft = 2048 - 75;
var tubeRight = child.x + 125;
var tubeLeft = child.x - 125;
if (!(enemyLeft > tubeRight || enemyRight < tubeLeft)) {
tubeCollision = true;
break;
}
}
}
if (!tubeCollision) {
LK.setTimeout(function () {
if (stopSpawn) {
return;
}
var enemy = new Enemy();
enemy.x = 2048;
enemy.y = 2732 / 2 - 13;
enemy.zIndex = 10;
enemies.push(enemy);
game.addChild(enemy);
}, 100);
}
enemySpawnCounter = 0;
enemySpawnInterval = Math.floor(Math.random() * 100) + 30;
}
enemySpawnCounter = 0;
enemySpawnInterval = Math.floor(Math.random() * 100) + 30;
}
game.children.sort(function (a, b) {
return (a.zIndex || 0) - (b.zIndex || 0);
});
// --- Enemy - Player ---
for (var j = enemies.length - 1; j >= 0; j--) {
if (enemies[j]) {
enemies[j].update();
}
if (player.intersects(enemies[j]) && enemies[j].canDamage) {
enemies[j].canDamage = false;
LK.effects.flashScreen(0xff0000, 750, 0.0001);
player.hit();
if (player.hearts <= 0) {
LK.showGameOver();
}
}
for (var k = game.children.length - 1; k >= 0; k--) {
var child = game.children[k];
if (child instanceof Weapon && child.intersects(enemies[j])) {
var coin = new Coin();
coin.x = enemies[j].x;
coin.y = enemies[j].y;
coin.velocity = 5;
game.addChild(coin);
coins.push(coin);
var particleEffect = LK.getAsset('particle', {
anchorX: 0.5,
anchorY: 0.5,
color: 0x808080
});
particle.zindex = 300;
particleEffect.x = enemies[j].x - 15;
particleEffect.y = enemies[j].y;
game.addChild(particleEffect);
LK.setTimeout(function () {
particleEffect.destroy();
}, 150);
enemies[j].destroy();
child.destroy();
enemies.splice(j, 1);
break;
}
}
}
// --- ZigzagEnemy - Player ---
for (var z = zigzagEnemies.length - 1; z >= 0; z--) {
if (zigzagEnemies[z]) {
zigzagEnemies[z].update();
}
if (player.intersects(zigzagEnemies[z]) && zigzagEnemies[z].canDamage) {
zigzagEnemies[z].canDamage = false;
LK.effects.flashScreen(0xff0000, 750, 0.0001);
player.loseHeart();
if (player.hearts <= 0) {
LK.showGameOver();
}
}
for (var k = game.children.length - 1; k >= 0; k--) {
var child = game.children[k];
if (child instanceof Weapon && child.intersects(zigzagEnemies[z])) {
// Ölüm anındaki koordinatlar
var px = zigzagEnemies[z].x,
py = zigzagEnemies[z].y;
// Partikül efekti
var particleEffect = LK.getAsset('particle', {
anchorX: 0.5,
anchorY: 0.5,
color: 0x808080
});
particleEffect.x = px;
particleEffect.y = py;
particleEffect.zIndex = 300;
game.addChild(particleEffect);
LK.setTimeout(function () {
particleEffect.destroy();
}, 100);
zigzagEnemies[z].destroy();
child.destroy();
zigzagEnemies.splice(z, 1);
break;
}
}
}
// --- FlyinEnemy - Player ---
for (var n = flyinEnemies.length - 1; n >= 0; n--) {
if (flyinEnemies[n]) {
flyinEnemies[n].update();
}
if (player.intersects(flyinEnemies[n]) && flyinEnemies[n].canDamage) {
flyinEnemies[n].canDamage = false;
LK.effects.flashScreen(0xff0000, 750, 0.0001);
player.hit();
if (player.hearts <= 0) {
LK.showGameOver();
}
}
for (var k = game.children.length - 1; k >= 0; k--) {
var child = game.children[k];
if (child instanceof Weapon && child.intersects(flyinEnemies[n])) {
if (!flyinEnemies[n].wave) {
var coin = new Coin();
coin.x = flyinEnemies[n].x;
coin.y = flyinEnemies[n].y + 60;
coin.velocity = 5;
game.addChild(coin);
coins.push(coin);
}
var particleEffect = LK.getAsset('particle', {
anchorX: 0.5,
anchorY: 0.5,
color: 0x808080
});
particleEffect.x = flyinEnemies[n].x - 30;
particleEffect.y = flyinEnemies[n].y + 30;
game.addChild(particleEffect);
LK.setTimeout(function () {
particleEffect.destroy();
}, 150);
flyinEnemies[n].destroy();
child.destroy();
flyinEnemies.splice(n, 1);
break;
}
}
if (flyinEnemies[n] && !flyinEnemies[n].homing && flyinEnemies[n].x < -50) {
flyinEnemies[n].destroy();
flyinEnemies.splice(n, 1);
}
}
// --- TrainEnemy - Player ---
for (var t = trainEnemies.length - 1; t >= 0; t--) {
if (trainEnemies[t]) {
trainEnemies[t].update();
}
if (player.intersects(trainEnemies[t]) && trainEnemies[t].canDamage) {
trainEnemies[t].canDamage = false;
LK.effects.flashScreen(0xff0000, 750, 0.0001);
player.loseHeart();
if (player.hearts <= 0) {
LK.showGameOver();
}
}
for (var k = game.children.length - 1; k >= 0; k--) {
var child = game.children[k];
if (child instanceof Weapon && child.intersects(trainEnemies[t])) {
child.destroy();
break;
}
}
}
// --- Coin Toplanması ---
for (var m = coins.length - 1; m >= 0; m--) {
var coin = coins[m];
coin.x -= coin.velocity;
if (coin.x < -100) {
coin.destroy();
coins.splice(m, 1);
} else if (player.intersects(coin)) {
coinCounter++;
scoreText.setText(coinCounter.toString());
if (coinCounter > 9 && !scoreText.movedLeft) {
scoreText.x -= 20;
scoreText.movedLeft = true;
}
coin.destroy();
coins.splice(m, 1);
}
}
};
LK.stage.addChild(game);
/****
* Tube Spawn (her 15 saniyede bir)
****/
function spawnTube() {
if (stopSpawn || gameStartDelay) {
return;
}
var tube = new Tube();
tube.x = 2048 + 125;
tube.y = 2732 / 2 - 120;
game.addChild(tube);
// yesil_1 nesnesi; puan başlangıcı 0 olarak ayarlandı
var yesil1 = LK.getAsset('yesil_1', {
anchorX: 0.5,
anchorY: 0.5
});
var yesil1PointsCounter = 0;
yesil1.x = tube.x;
yesil1.y = tube.y - 170;
yesil1.speed = 10;
yesil1.points = 0;
yesil1.fadeBonusApplied = false;
yesil1.coinBonusApplied = false;
yesil1.touchBonusApplied = false;
yesil1.update = function () {
yesil1.x -= yesil1.speed;
if (yesil1.x < -yesil1.width) {
yesil1.destroy();
}
function applyBonus(condition, bonusFlag, bonusName) {
if (condition && !yesil1[bonusFlag]) {
yesil1[bonusFlag] = true;
yesil1.points += 1;
console.log(bonusName + " applied. Yesil1 points: " + yesil1.points);
}
}
applyBonus(game.fadeTriggered, 'fadeBonusApplied', "Fade bonus");
applyBonus(coinCounter >= 50, 'coinBonusApplied', "Coin bonus");
applyBonus(player.intersects(yesil1) && yesil1.points >= 2, 'touchBonusApplied', "Touch bonus");
// Eğer yesil1 puanı 3 veya daha fazla olursa:
if (yesil1.points >= 3) {
yesil1PointsCounter++;
if (yesil1PointsCounter === 1) {
if (!yesil1.spawnScheduled) {
yesil1.spawnScheduled = true;
console.log("Yesil1 3 puana ulaştı. Tube2, zigzagenemy ve trainenemy spawn ediliyor.");
// Trainenemy'yi 2 saniye sonra spawn ediyoruz
LK.setTimeout(function () {
var trainEnemy = LK.getAsset('Trainenemy', {
anchorX: 0.5,
anchorY: 0.5
});
trainEnemy.zIndex = 20;
trainEnemy.x = 2048; // Ekranın en sağında
trainEnemy.y = 2732 / 2; // Ekranın ortasında
trainEnemy.canDamage = true; // Add this line to ensure damage works
game.addChild(trainEnemy);
trainEnemies.push(trainEnemy); // Add to trainEnemies array
// Add invisible FlyinEnemy inside TrainEnemy
var invisibleFlyinEnemy = new FlyinEnemy();
invisibleFlyinEnemy.x = trainEnemy.x;
invisibleFlyinEnemy.y = trainEnemy.y;
invisibleFlyinEnemy.alpha = 0; // Make it invisible
invisibleFlyinEnemy.canDamage = true; // Ensure it can damage the player
game.addChild(invisibleFlyinEnemy);
trainEnemy.update = function () {
var _this = this;
if (!this.slowed) {
this.slowed = true;
this.originalSpeed = 16.05; // 7% faster than 15
this.x -= 15 * 0.96 / 2; // 4% slower than original (was 15), half speed for initial delay
LK.setTimeout(function () {
_this.x -= 15 * 0.96; // 4% slower than original (was 15), full speed after delay
}, 500);
} else {
this.x -= 15 * 0.96; // 4% slower than original (was 15)
}
// Check if trainEnemy has reached the middle of the screen
if (this.x <= 2048 / 2 && !this.falling) {
this.falling = true;
this.fallSpeed = 0; // Initial fall speed
var _this = this;
LK.setTimeout(function () {
_this.fallSpeed = 5; // Set fall speed after 0.5 seconds
}, 500);
}
// If falling, move downwards
if (this.falling) {
this.y += this.fallSpeed;
}
if (this.x < -this.width || this.y > 2732) {
this.destroy();
invisibleFlyinEnemy.destroy(); // Destroy the invisible flyin enemy as well
// Remove from trainEnemies array
var index = trainEnemies.indexOf(this);
if (index !== -1) {
trainEnemies.splice(index, 1);
}
}
};
}, 2000);
// Spawn another trainenemy 6 seconds after yesil_1 has 3 points
LK.setTimeout(function () {
var thirdTrainEnemy = LK.getAsset('Trainenemy', {
anchorX: 0.5,
anchorY: 0.5
});
thirdTrainEnemy.zIndex = 20;
thirdTrainEnemy.x = 2048; // Ekranın en sağında
thirdTrainEnemy.y = 2732 / 2; // Ekranın ortasında
thirdTrainEnemy.canDamage = true; // Add this line to ensure damage works
game.addChild(thirdTrainEnemy);
trainEnemies.push(thirdTrainEnemy); // Add to trainEnemies array
thirdTrainEnemy.update = function () {
var _this = this;
if (!this.slowed) {
this.slowed = true;
this.originalSpeed = 16.05; // 7% faster than 15
this.x -= 15 * 0.96 / 2; // 4% slower than original (was 15), half speed for initial delay
LK.setTimeout(function () {
_this.x -= 15 * 0.96; // 4% slower than original (was 15), full speed after delay
}, 500);
} else {
this.x -= 15 * 0.96; // 4% slower than original (was 15)
}
// Check if trainEnemy has reached the middle of the screen
if (this.x <= 2048 / 2 && !this.falling) {
this.falling = true;
this.fallSpeed = 0; // Initial fall speed
var _this = this;
LK.setTimeout(function () {
_this.fallSpeed = 5; // Set fall speed after 0.5 seconds
}, 500);
}
// If falling, move downwards
if (this.falling) {
this.y += this.fallSpeed;
}
if (this.x < -this.width || this.y > 2732) {
this.destroy();
}
};
}, 6000);
// Spawn another trainenemy 8 seconds after yesil_1 has 3 points
LK.setTimeout(function () {
var fourthTrainEnemy = LK.getAsset('Trainenemy', {
anchorX: 0.5,
anchorY: 0.5
});
fourthTrainEnemy.zIndex = 20;
fourthTrainEnemy.x = 2048; // Ekranın en sağında
fourthTrainEnemy.y = 2732 / 2; // Ekranın ortasında
fourthTrainEnemy.canDamage = true; // Add this line to ensure damage works
game.addChild(fourthTrainEnemy);
trainEnemies.push(fourthTrainEnemy); // Add to trainEnemies array
fourthTrainEnemy.update = function () {
var _this = this;
if (!this.slowed) {
this.slowed = true;
this.originalSpeed = 16.05; // 7% faster than 15
this.x -= 15 * 0.96 / 2; // 4% slower than original (was 15), half speed for initial delay
LK.setTimeout(function () {
_this.x -= 15 * 0.96; // 4% slower than original (was 15), full speed after delay
}, 500);
} else {
this.x -= 15 * 0.96; // 4% slower than original (was 15)
}
// Check if trainEnemy has reached the middle of the screen
if (this.x <= 2048 / 2 && !this.falling) {
this.falling = true;
this.fallSpeed = 0; // Initial fall speed
var _this = this;
LK.setTimeout(function () {
_this.fallSpeed = 5; // Set fall speed after 0.5 seconds
}, 500);
}
// If falling, move downwards
if (this.falling) {
this.y += this.fallSpeed;
}
if (this.x < -this.width || this.y > 2732) {
this.destroy();
}
};
}, 8000);
// Spawn another trainenemy 10 seconds after yesil_1 has 3 points
LK.setTimeout(function () {
var fifthTrainEnemy = LK.getAsset('Trainenemy', {
anchorX: 0.5,
anchorY: 0.5
});
fifthTrainEnemy.zIndex = 20;
fifthTrainEnemy.x = 2048; // Ekranın en sağında
fifthTrainEnemy.y = 2732 / 2; // Ekranın ortasında
fifthTrainEnemy.canDamage = true; // Add this line to ensure damage works
game.addChild(fifthTrainEnemy);
trainEnemies.push(fifthTrainEnemy); // Add to trainEnemies array
fifthTrainEnemy.update = function () {
var _this = this;
if (!this.slowed) {
this.slowed = true;
this.originalSpeed = 16.05; // 7% faster than 15
this.x -= 15 * 0.96 / 2; // 4% slower than original (was 15), half speed for initial delay
LK.setTimeout(function () {
_this.x -= 15 * 0.96; // 4% slower than original (was 15), full speed after delay
}, 500);
} else {
this.x -= 15 * 0.96; // 4% slower than original (was 15)
}
// Check if trainEnemy has reached the middle of the screen
if (this.x <= 2048 / 2 && !this.falling) {
this.falling = true;
this.fallSpeed = 0; // Initial fall speed
var _this = this;
LK.setTimeout(function () {
_this.fallSpeed = 5; // Set fall speed after 0.5 seconds
}, 500);
}
// If falling, move downwards
if (this.falling) {
this.y += this.fallSpeed;
}
if (this.x < -this.width || this.y > 2732) {
this.destroy();
}
};
}, 10000);
// Spawn another trainenemy 12 seconds after yesil_1 has 3 points
LK.setTimeout(function () {
var sixthTrainEnemy = LK.getAsset('Trainenemy', {
anchorX: 0.5,
anchorY: 0.5
});
sixthTrainEnemy.zIndex = 20;
sixthTrainEnemy.x = 2048; // Ekranın en sağında
sixthTrainEnemy.y = 2732 / 2; // Ekranın ortasında
sixthTrainEnemy.canDamage = true; // Add this line to ensure damage works
game.addChild(sixthTrainEnemy);
trainEnemies.push(sixthTrainEnemy); // Add to trainEnemies array
sixthTrainEnemy.update = function () {
var _this = this;
if (!this.slowed) {
this.slowed = true;
this.originalSpeed = 16.05; // 7% faster than 15
this.x -= 15 * 0.96 / 2; // 4% slower than original (was 15), half speed for initial delay
LK.setTimeout(function () {
_this.x -= 15 * 0.96; // 4% slower than original (was 15), full speed after delay
}, 500);
} else {
this.x -= 15 * 0.96; // 4% slower than original (was 15)
}
// Check if trainEnemy has reached the middle of the screen
if (this.x <= 2048 / 2 && !this.falling) {
this.falling = true;
this.fallSpeed = 0; // Initial fall speed
var _this = this;
LK.setTimeout(function () {
_this.fallSpeed = 5; // Set fall speed after 0.5 seconds
}, 500);
}
// If falling, move downwards
if (this.falling) {
this.y += this.fallSpeed;
}
if (this.x < -this.width || this.y > 2732) {
this.destroy();
}
};
}, 12000);
// Spawn another trainenemy 3 seconds after the first one
LK.setTimeout(function () {
var secondTrainEnemy = LK.getAsset('Trainenemy', {
anchorX: 0.5,
anchorY: 0.5
});
secondTrainEnemy.zIndex = 20;
secondTrainEnemy.x = 2048; // Ekranın en sağında
secondTrainEnemy.y = 2732 / 2; // Ekranın ortasında
secondTrainEnemy.canDamage = true; // Add this line to ensure damage works
game.addChild(secondTrainEnemy);
trainEnemies.push(secondTrainEnemy); // Add to trainEnemies array
secondTrainEnemy.update = function () {
var _this = this;
if (!this.slowed) {
this.slowed = true;
this.originalSpeed = 16.05; // 7% faster than 15
this.x -= 15 * 0.96 / 2; // 4% slower than original (was 15), half speed for initial delay
LK.setTimeout(function () {
_this.x -= 15 * 0.96; // 4% slower than original (was 15), full speed after delay
}, 500);
} else {
this.x -= 15 * 0.96; // 4% slower than original (was 15)
}
// Check if trainEnemy has reached the middle of the screen
if (this.x <= 2048 / 2 && !this.falling) {
this.falling = true;
this.fallSpeed = 0; // Initial fall speed
var _this = this;
LK.setTimeout(function () {
_this.fallSpeed = 5; // Set fall speed after 0.5 seconds
}, 500);
}
// If falling, move downwards
if (this.falling) {
this.y += this.fallSpeed;
}
if (this.x < -this.width || this.y > 2732) {
this.destroy();
}
};
}, 3000);
// Tube2'yi hemen spawn ediyoruz
var tube2 = new Tube2();
// Tube2'nin ekranda görüneceği konumu ayarlıyoruz
tube2.x = 2048 / 2 + 140 - 150;
tube2.y = tube2.height / 2 - 60;
game.addChild(tube2);
// Tube2'yi 15 saniye sonra sola hareket ettir
LK.setTimeout(function () {
tube2.update = function () {
this.x -= this.speed;
if (this.x < -this.width) {
this.destroy();
}
};
}, 15000);
// Schedule ZigzagEnemy to spawn 15 seconds after yesil_1 reaches 3 points
LK.setTimeout(function () {
function spawnZigzagEnemy() {
var zigzagEnemy = LK.getAsset('zigzagenemy', {
anchorX: 0.5,
anchorY: 0.5
});
zigzagEnemy.zIndex = 20;
zigzagEnemy.x = 2048; // Spawn at the right edge of the screen
zigzagEnemy.y = 2732 / 2; // Vertically centered
zigzagEnemy.canDamage = true; // Add this line to ensure damage works
game.addChild(zigzagEnemy);
zigzagEnemies.push(zigzagEnemy); // Add enemy to the zigzagEnemies array
zigzagEnemy.update = function () {
this.x -= 8 * 0.96; // 4% slower than original (was 8)
if (!this.movingUp) {
this.y += 12 * 0.96; // 4% slower than original (was 12)
if (this.y >= 2732 / 2) {
// Middle of the screen
this.movingUp = true;
}
} else {
this.y -= 12 * 0.96; // 4% slower than original (was 12)
if (this.y <= 650) {
// 650 pixels down from the top of the screen
this.movingUp = false;
}
}
if (this.x < -this.width) {
this.destroy();
// Remove from the zigzagEnemies array
var index = zigzagEnemies.indexOf(this);
if (index !== -1) {
zigzagEnemies.splice(index, 1);
}
}
};
// Schedule the next zigzagEnemy spawn
var nextSpawnTime = Math.random() * 1000 + 1000; // Random time between 1 and 2 seconds
LK.setTimeout(spawnZigzagEnemy, nextSpawnTime);
}
spawnZigzagEnemy();
}, 15000);
// Karakter yeniden spawn edilsin:
LK.setTimeout(function () {
var newCharacter = new Player();
newCharacter.x = 2048 / 2 - 30;
newCharacter.y = 0;
newCharacter.isFalling = true;
newCharacter.fallSpeed = 0;
newCharacter.fallAcceleration = 0.7;
newCharacter.fallTargetY = 2732 / 2 + 3;
game.addChild(newCharacter);
player = newCharacter;
game.weaponEnabled = true;
}, 1000);
// bg3son ve endlessbg3’nin spawn sürelerini senkronize etmek için spawn intervalini azaltıyoruz
LK.setTimeout(function () {
spawnEndlessBG3();
// Artık spawn aralığı 3000ms
yesil1.endlessBG3Interval = LK.setInterval(function () {
spawnEndlessBG3();
}, 3000);
}, 15000);
}
}
console.log("Freeze game triggered because yesil1 points reached: " + yesil1.points);
stopSpawn = true;
var bb = LK.getAsset('bb', {
anchorX: 0.5,
anchorY: 0.5
});
bb.x = 2048 - bb.width / 2;
bb.y = 2732 / 2 + 150;
game.addChild(bb);
for (var i = 0; i < game.children.length; i++) {
var obj = game.children[i];
if (obj.update) {
obj.update = function () {};
}
}
// Arka plan ve tube güncellemelerini 5 saniyelik bir süre sonra geri veriyoruz
LK.setTimeout(function () {
for (var i = 0; i < game.children.length; i++) {
var obj = game.children[i];
if (obj instanceof ScrollingBackground2 || obj instanceof Tube) {
obj.update = function () {
this.x -= this.speed;
if (this.x < -this.width) {
this.destroy();
}
};
}
}
}, 5000);
var kara = LK.getAsset('kara', {
anchorX: 0.5,
anchorY: 0.5
});
kara.x = 2048 / 2;
kara.y = 2732 / 2;
kara.alpha = 0;
kara.zIndex = 1;
game.addChild(kara);
var fadeInSteps = 30;
var fadeInStepTime = 500 / fadeInSteps;
var fadeInStep = 0;
var fadeInInterval = LK.setInterval(function () {
if (fadeInStep < fadeInSteps) {
kara.alpha = fadeInStep / fadeInSteps;
fadeInStep++;
} else {
LK.clearInterval(fadeInInterval);
var fadeOutSteps = 30;
var fadeOutStepTime = 500 / fadeOutSteps;
var fadeOutStep = 0;
var fadeOutInterval = LK.setInterval(function () {
if (fadeOutStep < fadeOutSteps) {
kara.alpha = 1 - fadeOutStep / fadeOutSteps;
fadeOutStep++;
} else {
LK.clearInterval(fadeOutInterval);
kara.destroy();
}
// bg3son ve endlessbg3 aynı anda harekete başlamalı
var bg3son = LK.getAsset('bg3son', {
anchorX: 0.5,
anchorY: 0.5
});
bg3son.zIndex = 1;
bg3son.x = 2048 / 2;
bg3son.y = 2732 / 2 + 150;
game.addChild(bg3son);
endlessbg3 = LK.getAsset('endlessbg3', {
anchorX: 0.5,
anchorY: 0.5
});
endlessbg3.zIndex = 1;
endlessbg3.x = bg3son.x + bg3son.width / 2 + 450;
endlessbg3.y = 2732 / 2 + 150;
game.addChild(endlessbg3);
var endlessbg3Child = LK.getAsset('endlessbg3', {
anchorX: 0.5,
anchorY: 0.5
});
endlessbg3Child.zIndex = 1;
endlessbg3Child.x = endlessbg3.x + 600;
endlessbg3Child.y = endlessbg3.y;
game.addChild(endlessbg3Child);
// Artık bg3son'un hareketi için delay yok; her ikisi de aynı anda sola hareket edecek
LK.setTimeout(function () {
bg3son.update = function () {
this.x -= 4;
};
}, 14000);
}, fadeOutStepTime);
}
}, fadeInStepTime);
LK.setTimeout(function () {
player.destroy();
function destroyAndRemove(objects) {
for (var i = objects.length - 1; i >= 0; i--) {
objects[i].destroy();
objects.splice(i, 1);
}
}
destroyAndRemove(enemies);
destroyAndRemove(flyinEnemies);
destroyAndRemove(coins);
for (var i = game.children.length - 1; i >= 0; i--) {
var child = game.children[i];
if (child.asset && (child.asset.name === 'background' || child.asset.name === 'tup_1')) {
child.destroy();
}
}
}, 500);
if (!game.isFading) {
console.log("Triggering fade effect because yesil1 is active with points: " + yesil1.points);
enhancedFadeEffect();
}
}
};
game.addChild(yesil1);
var control = LK.getAsset('control', {
anchorX: 0.5,
anchorY: 0.5
});
control.x = 0;
control.y = -177.5;
tube.addChild(control);
control.update = function () {
if (player.intersects(control)) {
if (!firstControlTriggered && coinCounter >= 20) {
var toggleSpawn = function toggleSpawn(state, delay) {
stopSpawn = state;
if (!state) {
LK.setTimeout(function () {
stopSpawn = false;
}, delay);
}
};
game.controlActive = true;
control.update = function () {};
console.log("Control event triggered: coinCounter = " + coinCounter);
startNormalEnemy = false;
coins.forEach(function (coin) {
coin.velocity = 0;
});
LK.setTimeout(function () {
coins.forEach(function (coin) {
coin.velocity = 5;
});
}, 4000);
toggleSpawn(true, 5000);
game.controlActive = true;
LK.setTimeout(function () {
for (var i = enemies.length - 1; i >= 0; i--) {
enemies[i].destroy();
enemies.splice(i, 1);
}
for (var i = flyinEnemies.length - 1; i >= 0; i--) {
flyinEnemies[i].destroy();
flyinEnemies.splice(i, 1);
}
}, 400);
for (var i = 0; i < game.children.length; i++) {
var obj = game.children[i];
if (obj.update) {
obj.update = function () {};
}
}
LK.setTimeout(function () {
player.destroy();
}, 330);
enhancedFadeEffect();
firstControlTriggered = true;
}
}
};
if (!stopSpawn) {
LK.setTimeout(spawnTube, 15000);
}
}
LK.setTimeout(function () {
if (!stopSpawn && !gameStartDelay) {
spawnTube();
}
}, 4000); // Wait 4 seconds before spawning the first tube
/****
* Arka Plan ve Oyuncu
****/
var scrollingBackground = new ScrollingBackground();
game.addChild(scrollingBackground);
var player = game.addChild(new Player());
player.x = 2048 / 2 - 30;
player.y = 2732 / 2 + 3;
/****
* Angel Helper
****/
// Create angel helper that will orbit around the player and protect them
var angel = new Angel();
angel.x = player.x;
angel.y = player.y - 150;
game.addChild(angel);
/****
* Skor GUI ve Kalp
****/
var counterBackground = LK.getAsset('counter_background', {
anchorX: 0.5,
anchorY: 0.5
});
LK.gui.top.addChild(counterBackground);
counterBackground.x = LK.gui.top.width / 2 - 62;
counterBackground.y = 45;
var scoreText = new Text2('0', {
size: 80,
fill: 0xFFFFFF
});
LK.gui.top.addChild(scoreText);
scoreText.x = LK.gui.top.width / 2 - 85;
scoreText.y = 0;
// Add 5 hearts to the top right of the screen
for (var i = 0; i < 5; i++) {
var heart = LK.getAsset('heart', {
anchorX: 0.5,
anchorY: 0.5
});
LK.gui.topRight.addChild(heart);
heart.x = -50 - i * 110; // Position from right edge going left
heart.y = 55;
hearts.push(heart);
}
/****
* enhancedFadeEffect: Fade-out, clear scene, spawn background2, Tube2, then new player
****/
function enhancedFadeEffect() {
if (game.isFading || game.fadeCompleted || !game.controlActive) {
return;
}
game.isFading = true;
game.fadeTriggered = true;
var overlay = LK.getAsset('overlay', {
anchorX: 0,
anchorY: 0
});
overlay.alpha = 0;
overlay.zIndex = 1;
if (!overlay.parent) {
LK.stage.addChild(overlay);
}
var steps = 20;
var duration = 500;
var stepTime = duration / steps;
var currentStep = 0;
var fadeOutInterval = LK.setInterval(function () {
if (currentStep < steps) {
overlay.alpha = currentStep / steps;
currentStep++;
} else {
LK.clearInterval(fadeOutInterval);
currentStep = 0;
stopSpawn = true;
while (game.children.length > 0) {
game.removeChild(game.children[0]);
// kodun bir kısmı bu hata şu :
// [insert intended functionality or leave empty if not needed]
}
var scrollingBg2 = new ScrollingBackground2();
scrollingBg2.alpha = 0;
game.scrollingBg2 = scrollingBg2;
game.addChild(scrollingBg2);
var tube2 = new Tube2();
control_2.x = 0;
control_2.y = -177.5;
tube2.addChild(control_2);
control_2.update = function () {
if (player && player.intersects(control_2)) {
if (coinCounter >= 50) {
console.log("Control_2 event triggered: coinCounter = " + coinCounter);
for (var i = 0; i < game.children.length; i++) {
var obj = game.children[i];
if (obj.update) {
obj.update = function () {};
}
}
}
}
};
tube2.x = 2048 / 2 + 140;
tube2.y = tube2.height / 2 - 60;
game.addChild(tube2);
LK.setTimeout(function () {
var newPlayer = new Player();
newPlayer.hearts = remainingHearts;
newPlayer.x = 2048 / 2 - 30;
newPlayer.y = tube2.y;
newPlayer.isFalling = true;
newPlayer.fallSpeed = 0;
newPlayer.fallAcceleration = 0.7;
newPlayer.fallTargetY = 2732 / 2 - 7;
game.addChild(newPlayer);
player = newPlayer;
game.weaponEnabled = true;
LK.setTimeout(function () {
spawnWaveOfFlyinEnemies();
}, 800);
LK.setTimeout(function () {
startNormalEnemy = true;
}, 10500);
}, 500);
var fadeInDuration = 500;
var fadeInStepTime = fadeInDuration / steps;
var fadeInInterval = LK.setInterval(function () {
if (currentStep < steps) {
if (game.scrollingBg2) {
game.scrollingBg2.alpha = currentStep / steps;
}
currentStep++;
} else {
LK.clearInterval(fadeInInterval);
if (overlay.parent) {
overlay.parent.removeChild(overlay);
}
var oldScrollingSpeed = game.scrollingBg2.speed;
var oldTubeSpeed = tube2.speed;
game.scrollingBg2.speed = 0;
tube2.speed = 0;
LK.setTimeout(function () {
game.scrollingBg2.speed = oldScrollingSpeed;
tube2.speed = oldTubeSpeed;
stopSpawn = false;
game.isFading = false;
game.fadeCompleted = true;
}, 8000);
}
}, fadeInStepTime);
}
}, stepTime);
}
/****
* Oyun Döngüsü
****/
game.update = function () {
scrollingBackground.update();
player.update();
// Update angel if it exists
if (angel && angel.update) {
angel.update();
}
if (game.scrollingBg2 && game.scrollingBg2.update) {
game.scrollingBg2.update();
}
for (var t = 0; t < game.children.length; t++) {
var child = game.children[t];
if (child instanceof Tube) {
child.update();
}
if (child.children) {
for (var c = 0; c < child.children.length; c++) {
var subChild = child.children[c];
if (subChild.update) {
subChild.update();
}
}
}
}
enemySpawnCounter++;
if (startNormalEnemy && !stopSpawn && enemySpawnCounter >= enemySpawnInterval && !(LK.ticks >= 876 && LK.ticks <= 936) && !(LK.ticks >= 1776 && LK.ticks <= 1836) && !(LK.ticks >= 2676 && LK.ticks <= 2736) && !(LK.ticks >= 3576 && LK.ticks <= 3636) && !(LK.ticks >= 4476 && LK.ticks <= 4536) && !(LK.ticks >= 5376 && LK.ticks <= 5436) && !(LK.ticks >= 6276 && LK.ticks <= 6336) && !(LK.ticks >= 7776 && LK.ticks <= 7836)) {
var canSpawn = true;
for (var i = 0; i < enemies.length; i++) {
if (enemies[i].x > 1800) {
canSpawn = false;
break;
}
}
if (canSpawn) {
var tubeCollision = false;
for (var t = 0; t < game.children.length; t++) {
var child = game.children[t];
if (child.asset && child.asset.name === 'tup_1') {
var enemyRight = 2048 + 75;
var enemyLeft = 2048 - 75;
var tubeRight = child.x + 125;
var tubeLeft = child.x - 125;
if (!(enemyLeft > tubeRight || enemyRight < tubeLeft)) {
tubeCollision = true;
break;
}
}
}
if (!tubeCollision) {
LK.setTimeout(function () {
if (stopSpawn) {
return;
}
var enemy = new Enemy();
enemy.x = 2048;
enemy.y = 2732 / 2 - 13;
enemy.zIndex = 10;
enemies.push(enemy);
game.addChild(enemy);
}, 100);
}
enemySpawnCounter = 0;
enemySpawnInterval = Math.floor(Math.random() * 100) + 30;
}
enemySpawnCounter = 0;
enemySpawnInterval = Math.floor(Math.random() * 100) + 30;
}
game.children.sort(function (a, b) {
return (a.zIndex || 0) - (b.zIndex || 0);
});
// Çarpışma Kontrolleri
for (var j = enemies.length - 1; j >= 0; j--) {
if (enemies[j]) {
enemies[j].update();
}
if (player.intersects(enemies[j]) && enemies[j].canDamage) {
enemies[j].canDamage = false;
LK.effects.flashScreen(0xff0000, 750, 0.0001);
player.loseHeart();
if (player.hearts <= 0) {
LK.showGameOver();
}
}
for (var k = game.children.length - 1; k >= 0; k--) {
var child = game.children[k];
if (child instanceof Weapon && child.intersects(enemies[j])) {
var coin = new Coin();
coin.x = enemies[j].x;
coin.y = enemies[j].y;
coin.velocity = 5;
game.addChild(coin);
coins.push(coin);
var particleEffect = LK.getAsset('particle', {
anchorX: 0.5,
anchorY: 0.5,
color: 0x808080
});
particleEffect.x = enemies[j].x - 15;
particleEffect.y = enemies[j].y;
game.addChild(particleEffect);
LK.setTimeout(function () {
particleEffect.destroy();
}, 150);
enemies[j].destroy();
child.destroy();
enemies.splice(j, 1);
break;
}
}
}
// --- ZigzagEnemy - Player ---
for (var z = zigzagEnemies.length - 1; z >= 0; z--) {
var zig = zigzagEnemies[z];
if (!zig) {
continue;
}
zig.update();
// Çarpışma ile hasar
if (player.intersects(zig) && zig.canDamage) {
zig.canDamage = false;
LK.effects.flashScreen(0xff0000, 750, 0.0001);
player.loseHeart();
if (player.hearts <= 0) {
LK.showGameOver();
}
}
// Silahla kesişme = ölüm + particle
for (var k = game.children.length - 1; k >= 0; k--) {
var child = game.children[k];
if (child instanceof Weapon && child.intersects(zig)) {
// Ölüm anındaki koordinatlar
var px = zig.x,
py = zig.y;
// Partikül efekti
var particleEffect = LK.getAsset('particle', {
anchorX: 0.5,
anchorY: 0.5,
color: 0x808080
});
particleEffect.x = px;
particleEffect.y = py;
particleEffect.zIndex = 300;
game.addChild(particleEffect);
LK.setTimeout(function () {
particleEffect.destroy();
}, 100);
// Spawn a coin at the zigzag enemy's position
var coin = new Coin();
coin.x = px;
coin.y = py;
coin.velocity = 5; // Move to the left
game.addChild(coin);
coins.push(coin);
zig.destroy();
child.destroy();
zigzagEnemies.splice(z, 1);
break;
}
}
}
for (var n = flyinEnemies.length - 1; n >= 0; n--) {
if (flyinEnemies[n]) {
flyinEnemies[n].update();
}
if (player.intersects(flyinEnemies[n]) && flyinEnemies[n].canDamage) {
flyinEnemies[n].canDamage = false;
LK.effects.flashScreen(0xff0000, 750, 0.0001);
player.loseHeart();
if (player.hearts <= 0) {
LK.showGameOver();
}
}
for (var k = game.children.length - 1; k >= 0; k--) {
var child = game.children[k];
if (child instanceof Weapon && child.intersects(flyinEnemies[n])) {
if (!flyinEnemies[n].wave) {
var coin = new Coin();
coin.x = flyinEnemies[n].x;
coin.y = flyinEnemies[n].y + 60;
coin.velocity = 5;
game.addChild(coin);
coins.push(coin);
}
var particleEffect = LK.getAsset('particle', {
anchorX: 0.5,
anchorY: 0.5,
color: 0x808080
});
particleEffect.x = flyinEnemies[n].x - 30;
particleEffect.y = flyinEnemies[n].y + 30;
game.addChild(particleEffect);
LK.setTimeout(function () {
particleEffect.destroy();
}, 150);
flyinEnemies[n].destroy();
child.destroy();
flyinEnemies.splice(n, 1);
break;
}
}
if (flyinEnemies[n] && !flyinEnemies[n].homing && flyinEnemies[n].x < -50) {
flyinEnemies[n].destroy();
flyinEnemies.splice(n, 1);
}
}
// --- TrainEnemy - Player ---
for (var t = trainEnemies.length - 1; t >= 0; t--) {
var train = trainEnemies[t];
if (!train) {
continue;
}
train.update();
// Çarpışma ile hasar
if (player.intersects(train) && train.canDamage) {
train.canDamage = false;
LK.effects.flashScreen(0xff0000, 750, 0.0001);
player.loseHeart();
if (player.hearts <= 0) {
LK.showGameOver();
}
}
// Silahla kesişme = particle + (isterseniz destroy)
for (var k = game.children.length - 1; k >= 0; k--) {
var child = game.children[k];
if (child instanceof Weapon && child.intersects(train)) {
// Ölüm anı veya çarpışma noktası
var tx = train.x,
ty = train.y;
// Partikül efekti
var particleEffect = LK.getAsset('particle', {
anchorX: 0.5,
anchorY: 0.5,
color: 0x808080
});
particleEffect.x = tx;
particleEffect.y = ty;
particleEffect.zIndex = 300;
game.addChild(particleEffect);
LK.setTimeout(function () {
particleEffect.destroy();
}, 100);
// Silahı yok et
child.destroy();
break;
}
}
}
for (var m = coins.length - 1; m >= 0; m--) {
var coin = coins[m];
coin.x -= coin.velocity;
if (coin.x < -100) {
coin.destroy();
coins.splice(m, 1);
} else if (player.intersects(coin)) {
coinCounter++;
// Update both the visible score text and the internal LK score
scoreText.setText(coinCounter.toString());
// Set LK score system to match coin counter
LK.setScore(coinCounter);
if (coinCounter > 9 && !scoreText.movedLeft) {
scoreText.x -= 20;
scoreText.movedLeft = true;
}
coin.destroy();
coins.splice(m, 1);
}
}
;
// Handle mystery box updates and collisions
for (var m = mysteryBoxes.length - 1; m >= 0; m--) {
var box = mysteryBoxes[m];
// Update the box movement/animation
box.update();
// Check for collision with player
if (player && player.intersects(box)) {
// Grant infinite hearts when collected
box.grantInfiniteHearts();
// Remove from tracking array
mysteryBoxes.splice(m, 1);
} else if (box.x < -150) {
// Remove if off screen
box.destroy();
mysteryBoxes.splice(m, 1);
}
}
};
LK.stage.addChild(game);
// Dokunma/Kontrol
game.down = function (x, y, obj) {
if (player.isJumping && game.weaponEnabled) {
if (!game.lastWeaponTime || Date.now() - game.lastWeaponTime > 350) {
var weapon = new Weapon();
weapon.x = player.x;
weapon.y = player.y;
var dx = x - weapon.x;
var dy = y - weapon.y;
var distance = Math.sqrt(dx * dx + dy * dy);
weapon.directionX = dx / distance;
weapon.directionY = dy / distance;
var angle = Math.acos(weapon.directionY / Math.sqrt(weapon.directionX * weapon.directionX + weapon.directionY * weapon.directionY));
var angleInDegrees = angle * (180 / Math.PI);
if (angleInDegrees <= 30) {
weapon.speed *= 1.3;
}
game.addChild(weapon);
LK.setTimeout(function () {
weapon.destroy();
}, 9000);
game.lastWeaponTime = Date.now();
}
}
player.jump();
};
// Oyunu Sahneye Ekle
LK.stage.addChild(game); ===================================================================
--- original.js
+++ change.js
@@ -220,10 +220,31 @@
// Move from right to left
self.x -= self.velocity;
// Rotate the box for visual effect
boxGraphics.rotation += 0.02;
- // Add floating effect
- self.y += Math.sin(LK.ticks / 15) * 0.5;
+ // Check for tubes and align with them if they're in proximity
+ var alignedWithTube = false;
+ for (var i = 0; i < game.children.length; i++) {
+ var child = game.children[i];
+ if (child instanceof Tube && Math.abs(self.x - child.x) < 100) {
+ // Align vertically with the tube
+ self.y = child.y - 50; // Position slightly above the tube
+ alignedWithTube = true;
+ break;
+ }
+ }
+ // Only apply floating effect if not aligned with a tube
+ if (!alignedWithTube) {
+ // If player exists and not aligned with tube, follow player's y position
+ if (player) {
+ // Gradually move toward player's height
+ var targetY = player.y;
+ self.y += (targetY - self.y) * 0.05;
+ } else {
+ // Add floating effect
+ self.y += Math.sin(LK.ticks / 15) * 0.5;
+ }
+ }
// Remove if off screen
if (self.x < -150) {
self.destroy();
}
@@ -626,12 +647,12 @@
return;
}
// Create a new mystery box
var mysteryBox = new MysteryBox();
- // Position it just off the right side of the screen at a random height
+ // Position it just off the right side of the screen
mysteryBox.x = 2048 + 75;
- // Random position between 1/3 and 2/3 of screen height
- mysteryBox.y = 2732 / 3 + Math.random() * (2732 / 3);
+ // Position it at the same height as the player to ensure they can collect it
+ mysteryBox.y = player ? player.y : 2732 / 2;
// Add to game and tracking array
game.addChild(mysteryBox);
mysteryBoxes.push(mysteryBox);
// Schedule next spawn with a random delay between 20-30 seconds
red heart mario. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
completely black simple counter without sharp edges
sea and sky Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
sea and sky,pixel,realistic but detailles benzer renkler mavi ve mavi Single Game Texture. In-Game asset. 2d. Blank background. low contrast. No shadows
Restyled
Among Us. In-Game asset. High contrast. No shadows
Among Us killer
Gun BB gun. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
Skibidi toilet. In-Game asset. High contrast. No shadows
Gyatt . No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
Angel . No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat