User prompt
Speed up character by 4000 units
User prompt
Put the End Gate at 500 meters
User prompt
Add another TNT on top of some TNT
User prompt
Make some TNTs overlap each other, so some are double
User prompt
Open the gap between the overlapping boxes a little bit
User prompt
Reduce the frequency of coins a bit, adjust their randomness and place them in different places than other assets
User prompt
Make TNTs stick to the ground
User prompt
Don't let the TNTs and other things be in the same position, but at the same time, the TNTs appear above the ground
User prompt
Change the entity's dangerous box to TNT
User prompt
Set the randomness of the square buttons in the game to mixed and make sure the danger boxes do not overlap
User prompt
Bring A1 to 3 meters
User prompt
A1 bring to 1 meter
User prompt
Remove the stone entity from the game
User prompt
When the character says to the stone, he should not pass through it, he should only stay on the left side of the stone and nothing should move, but he should be able to continue when the character jumps over the stone.
User prompt
When the character says stone, no effect occurs
User prompt
When the character touches the stone, he will just stand still and not move in any way.
User prompt
The game will not end when the character touches the stone. No.
User prompt
The game does not end when the character touches the stone
User prompt
Change the name of your existence to stone
User prompt
Rename the block to taş
User prompt
Let's add another asset to the game, this will appear as a square, when the character hits it, it will stop and not move forward.
User prompt
Let the steps appear above the ground
User prompt
Let's add steps to the game so that when the character hits them, he just stops and when he jumps, he passes over them.
User prompt
A11 spin faster and smoother ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Move up further ↪💡 Consider importing and using the following plugins: @upit/tween.v1
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ var Box = Container.expand(function () { var self = Container.call(this); var boxGraphics = self.attachAsset('square_button', { anchorX: 0.5, anchorY: 0.5, scaleX: 1.5, scaleY: 1.5, tint: 0xFFB347 // Bright orange color }); self.speed = gameSpeed; self.broken = false; self.health = 1; // Can be broken in one hit self.update = function () { self.x -= self.speed; }; // Method to break the box and spawn coins self.breakBox = function () { if (!self.broken) { self.broken = true; // Create breaking effect LK.effects.flashObject(self, 0xFFFFFF, 300); // Spawn 2-3 coins around the box var numCoins = 2 + Math.floor(Math.random() * 2); for (var c = 0; c < numCoins; c++) { var coin = new Coin(); coin.x = self.x + (Math.random() - 0.5) * 100; coin.y = self.y + (Math.random() - 0.5) * 80; coins.push(coin); game.addChild(coin); } // Simple fade out without scaling or rotation tween(self, { alpha: 0 }, { duration: 400, onFinish: function onFinish() { self.destroy(); } }); } }; return self; }); var Coin = Container.expand(function () { var self = Container.call(this); var coinGraphics = self.attachAsset('coin', { anchorX: 0.5, anchorY: 0.5 }); // Create aura effect var aura = self.attachAsset('coin', { anchorX: 0.5, anchorY: 0.5, scaleX: 1.5, scaleY: 1.5, alpha: 0.3, tint: 0xFFD700 }); self.speed = gameSpeed; self.collected = false; // Floating animation self.floatOffset = 0; // Start aura pulsing animation function startAuraPulse() { tween(aura, { scaleX: 2.0, scaleY: 2.0, alpha: 0.1 }, { duration: 800, easing: tween.easeInOut, onFinish: function onFinish() { tween(aura, { scaleX: 1.5, scaleY: 1.5, alpha: 0.3 }, { duration: 800, easing: tween.easeInOut, onFinish: startAuraPulse }); } }); } startAuraPulse(); self.update = function () { self.x -= self.speed; // Floating animation self.floatOffset += 0.15; coinGraphics.y = Math.sin(self.floatOffset) * 10; aura.y = Math.sin(self.floatOffset) * 10; // Rotation animation coinGraphics.rotation += 0.1; aura.rotation -= 0.05; // Counter-rotate aura for visual effect }; return self; }); var DamageBox = Container.expand(function () { var self = Container.call(this); var damageBoxGraphics = self.attachAsset('tnt', { anchorX: 0.5, anchorY: 0.5, scaleX: 1.5, scaleY: 1.5, tint: 0xFF4444 // Bright red color to indicate danger }); self.speed = gameSpeed; self.damaged = false; self.update = function () { self.x -= self.speed; }; // Method to cause damage to player self.damagePlayer = function () { if (!self.damaged && !player.isInvulnerable) { self.damaged = true; playerLives--; // Update lives counter text with animation livesText.setText(playerLives); // Animate lives text when taking damage tween(livesText, { scaleX: 1.5, scaleY: 1.5 }, { duration: 200, easing: tween.easeOut, onFinish: function onFinish() { tween(livesText, { scaleX: 1.0, scaleY: 1.0 }, { duration: 300, easing: tween.easeIn }); } }); // Flash heart when taking damage if (playerLives > 0) { LK.effects.flashObject(hearts[0], 0xFF0000, 500); } else { hearts[0].alpha = 0.3; } // Make player invulnerable temporarily player.isInvulnerable = true; LK.effects.flashObject(player, 0xFF0000, 1000); // Remove invulnerability after 2 seconds LK.setTimeout(function () { player.isInvulnerable = false; }, 2000); // Check for game over if (playerLives <= 0) { LK.showGameOver(); } // Create explosion effect when damaged self.createExplosion(); } }; // Method to create explosion effect self.createExplosion = function () { // Create explosion particles for (var p = 0; p < 12; p++) { var particle = LK.getAsset('tnt', { anchorX: 0.5, anchorY: 0.5, scaleX: 0.6, scaleY: 0.6, alpha: 1.0, x: self.x, y: self.y, tint: 0x8B0000 }); game.addChild(particle); var angle = p / 12 * Math.PI * 2; var distance = 100 + Math.random() * 80; var targetX = self.x + Math.cos(angle) * distance; var targetY = self.y + Math.sin(angle) * distance; tween(particle, { x: targetX, y: targetY, alpha: 0, scaleX: 0.1, scaleY: 0.1, rotation: Math.PI * 2 * (Math.random() > 0.5 ? 1 : -1) }, { duration: 600 + Math.random() * 200, easing: tween.easeOut, onFinish: function onFinish() { particle.destroy(); } }); } // Flash screen and hide the damage box LK.effects.flashScreen(0xFF0000, 300); tween(self, { alpha: 0, scaleX: 2.0, scaleY: 2.0 }, { duration: 400, easing: tween.easeOut, onFinish: function onFinish() { self.destroy(); } }); }; return self; }); var EndGate = Container.expand(function () { var self = Container.call(this); var gateGraphics = self.attachAsset('end_gate', { anchorX: 0.5, anchorY: 1.0, scaleX: 1.2, scaleY: 1.2, tint: 0xFFD700 // Golden color for finish gate }); // Create circular portal effect inside the gate (same as StartingGate) var portalCircle = self.attachAsset('A11', { anchorX: 0.5, anchorY: 0.5, scaleX: 1.0, scaleY: 1.0, x: 0, y: -280, alpha: 0.8, tint: 0x00FFFF }); // Start rotating animation for the portal function startPortalRotation() { tween(portalCircle, { rotation: Math.PI * 2 }, { duration: 800, easing: tween.linear, onFinish: startPortalRotation }); } // Add pulsing animation to make portal more dynamic function startPortalPulse() { tween(portalCircle, { scaleX: 1.2, scaleY: 1.2, alpha: 0.6 }, { duration: 1500, easing: tween.easeInOut, onFinish: function onFinish() { tween(portalCircle, { scaleX: 1.0, scaleY: 1.0, alpha: 0.8 }, { duration: 1500, easing: tween.easeInOut, onFinish: startPortalPulse }); } }); } startPortalRotation(); startPortalPulse(); // Add victory glow effect var victoryGlow = self.attachAsset('end_gate', { anchorX: 0.5, anchorY: 1.0, scaleX: 1.5, scaleY: 1.5, alpha: 0.4, tint: 0xFFFFFF // White victory glow }); // Start victory glow pulsing animation function startVictoryPulse() { tween(victoryGlow, { scaleX: 1.7, scaleY: 1.7, alpha: 0.1 }, { duration: 900, easing: tween.easeInOut, onFinish: function onFinish() { tween(victoryGlow, { scaleX: 1.5, scaleY: 1.5, alpha: 0.4 }, { duration: 900, easing: tween.easeInOut, onFinish: startVictoryPulse }); } }); } startVictoryPulse(); self.speed = gameSpeed; self.crossed = false; self.update = function () { self.x -= self.speed; }; // Method to trigger win condition self.triggerWin = function () { if (!self.crossed) { self.crossed = true; // Create victory particle effect for (var p = 0; p < 20; p++) { var particle = LK.getAsset('end_gate', { anchorX: 0.5, anchorY: 0.5, scaleX: 0.3, scaleY: 0.3, alpha: 1.0, x: self.x, y: self.y - 200, tint: p % 3 === 0 ? 0xFFD700 : p % 3 === 1 ? 0xFFFFFF : 0x00FF00 }); game.addChild(particle); var angle = p / 20 * Math.PI * 2; var distance = 200 + Math.random() * 150; var targetX = self.x + Math.cos(angle) * distance; var targetY = self.y - 200 + Math.sin(angle) * distance; tween(particle, { x: targetX, y: targetY, alpha: 0, scaleX: 0.1, scaleY: 0.1, rotation: Math.PI * 3 }, { duration: 1500 + Math.random() * 500, easing: tween.easeOut, onFinish: function onFinish() { particle.destroy(); } }); } // Flash screen with victory colors LK.effects.flashScreen(0xFFD700, 800); // Show collectibles summary after a brief delay LK.setTimeout(function () { showCollectiblesSummary(); }, 800); // Show you win after showing collectibles LK.setTimeout(function () { LK.showYouWin(); }, 3000); } }; return self; }); var Gem = Container.expand(function () { var self = Container.call(this); var gemGraphics = self.attachAsset('gem', { anchorX: 0.5, anchorY: 0.5 }); // Create crystalline aura effect var aura1 = self.attachAsset('gem', { anchorX: 0.5, anchorY: 0.5, scaleX: 1.3, scaleY: 1.3, alpha: 0.4, tint: 0x00FFFF }); var aura2 = self.attachAsset('gem', { anchorX: 0.5, anchorY: 0.5, scaleX: 1.6, scaleY: 1.6, alpha: 0.2, tint: 0x8A2BE2 }); self.speed = gameSpeed; self.collected = false; // Crystal aura remains steady without pulsing animation self.update = function () { self.x -= self.speed; // Crystal remains steady without rotation }; // Method to create particle effect when collected self.createParticles = function () { for (var p = 0; p < 8; p++) { var particle = LK.getAsset('gem', { anchorX: 0.5, anchorY: 0.5, scaleX: 0.3, scaleY: 0.3, alpha: 0.8, x: self.x, y: self.y, tint: p % 2 === 0 ? 0x00FFFF : 0x8A2BE2 }); game.addChild(particle); var angle = p / 8 * Math.PI * 2; var distance = 150 + Math.random() * 100; var targetX = self.x + Math.cos(angle) * distance; var targetY = self.y + Math.sin(angle) * distance; tween(particle, { x: targetX, y: targetY, alpha: 0, scaleX: 0.1, scaleY: 0.1, rotation: Math.PI * 2 }, { duration: 800 + Math.random() * 400, easing: tween.easeOut, onFinish: function onFinish() { particle.destroy(); } }); } }; return self; }); var Player = Container.expand(function () { var self = Container.call(this); var foxGraphics = self.attachAsset('fox', { anchorX: 0.5, anchorY: 1.0 }); self.isJumping = false; self.velocityY = 0; self.groundY = 2732 - 150 + 20; // Ground level self.jumpPower = -27; self.gravity = 1.2; self.runAnimationTimer = 0; self.isSpinning = false; self.spinDamageRadius = 150; self.jumpsRemaining = 2; // Allow double jump self.jump = function () { if (self.jumpsRemaining > 0) { // First jump or double jump if (!self.isJumping) { self.isJumping = true; } self.velocityY = self.jumpPower; self.jumpsRemaining--; LK.getSound('jump').play(); // Somersault animation - full 360 degree rotation for all jumps var rotationAmount = Math.PI * 2; // Full somersault (360 degrees) var jumpDuration = 600; // Duration should match typical jump time // Different animation for double jump var isDoubleJump = self.jumpsRemaining === 0 && self.isJumping; if (isDoubleJump) { // Double jump animation - faster somersault with scale effect tween(foxGraphics, { scaleX: 1.3, scaleY: 1.3, rotation: foxGraphics.rotation + rotationAmount }, { duration: jumpDuration * 0.7, // Faster for double jump easing: tween.easeOut, onFinish: function onFinish() { tween(foxGraphics, { scaleX: 1.0, scaleY: 1.0 }, { duration: 200, easing: tween.easeIn }); } }); } else { // Regular jump animation - standard somersault tween(foxGraphics, { scaleX: 1.2, scaleY: 1.2, rotation: foxGraphics.rotation + rotationAmount }, { duration: jumpDuration, easing: tween.easeOut, onFinish: function onFinish() { tween(foxGraphics, { scaleX: 1.0, scaleY: 1.0 }, { duration: 200, easing: tween.easeIn }); } }); } } }; self.spinAttack = function () { if (!self.isSpinning) { self.isSpinning = true; LK.getSound('jump').play(); // Reuse jump sound for spin // Horizontal rotation animation around character's center tween(foxGraphics, { rotation: Math.PI * 4, // 2 full horizontal rotations scaleX: 1.5, scaleY: 1.5, tint: 0xFF4500 }, { duration: 600, easing: tween.easeOut, onFinish: function onFinish() { self.isSpinning = false; foxGraphics.rotation = 0; foxGraphics.scaleX = 1.0; foxGraphics.scaleY = 1.0; foxGraphics.tint = 0xFFFFFF; } }); } }; self.update = function () { if (self.isJumping) { self.velocityY += self.gravity; self.y += self.velocityY; // Land on ground if (self.y >= self.groundY) { self.y = self.groundY; self.isJumping = false; self.velocityY = 0; self.jumpsRemaining = 2; // Reset double jump when landing // Reset character rotation when landing tween(foxGraphics, { rotation: 0, scaleX: 1.0, scaleY: 1.0 }, { duration: 200, easing: tween.easeOut }); } } else { // Running animation when on ground self.runAnimationTimer += 0.2; foxGraphics.y = Math.sin(self.runAnimationTimer) * 3; foxGraphics.scaleX = 1.0 + Math.sin(self.runAnimationTimer * 2) * 0.05; } }; return self; }); var StartingGate = Container.expand(function () { var self = Container.call(this); var gateGraphics = self.attachAsset('A1', { anchorX: 0.5, anchorY: 1.0, scaleX: 1.0, scaleY: 1.0 }); // Create circular portal effect inside the gate var portalCircle = self.attachAsset('A11', { anchorX: 0.5, anchorY: 0.5, scaleX: 0.8, scaleY: 0.8, x: 0, y: -200, alpha: 0.8, tint: 0x00FFFF }); // Start rotating animation for the portal function startPortalRotation() { tween(portalCircle, { rotation: Math.PI * 2 }, { duration: 800, easing: tween.linear, onFinish: startPortalRotation }); } // Add pulsing animation to make portal more dynamic function startPortalPulse() { tween(portalCircle, { scaleX: 1.0, scaleY: 1.0, alpha: 0.6 }, { duration: 1500, easing: tween.easeInOut, onFinish: function onFinish() { tween(portalCircle, { scaleX: 0.8, scaleY: 0.8, alpha: 0.8 }, { duration: 1500, easing: tween.easeInOut, onFinish: startPortalPulse }); } }); } startPortalRotation(); startPortalPulse(); self.speed = gameSpeed; self.update = function () { self.x -= self.speed; }; return self; }); var Trail = Container.expand(function () { var self = Container.call(this); var trailGraphics = self.attachAsset('fox', { anchorX: 0.5, anchorY: 1.0, scaleX: 0.6, scaleY: 0.6, alpha: 0.7 }); self.speed = gameSpeed; self.update = function () { self.x -= self.speed; }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x87CEEB }); /**** * Game Code ****/ var player; var coins = []; var gems = []; var boxes = []; var damageBoxes = []; var trails = []; var gameSpeed = 4008; var spawnTimer = 0; var coinCount = 0; var gemCount = 0; var distanceScore = 0; var groundY = 2732 - 150; var playerLives = 3; var trailTimer = 0; var crystalSpawned = false; var endGateSpawned = false; var startingGate; var endGate; var background1, background2; // UI Elements var coinIcon = LK.getAsset('coin_icon', { anchorX: 0.5, anchorY: 0, x: 0, y: 20 }); LK.gui.top.addChild(coinIcon); var coinText = new Text2('0', { size: 60, fill: 0xFFFFFF, font: "'Arial Black', 'Impact', 'Trebuchet MS', sans-serif", fontWeight: '900', stroke: 0x000000, strokeThickness: 15 }); coinText.anchor.set(0.5, 0); coinText.x = 0; coinText.y = 110; LK.gui.top.addChild(coinText); var gemIcon = null; var gemText = null; var scoreText = new Text2('Distance: 0', { size: 90, fill: 0xFFFFFF, fontStyle: 'italic', fontWeight: 'bold' }); scoreText.anchor.set(1, 0); LK.gui.topRight.addChild(scoreText); // Create heart UI elements - only one heart image with lives counter var hearts = []; // Create single heart image var heart = LK.getAsset('heart', { anchorX: 0.5, anchorY: 0.5, scaleX: 1.5, scaleY: 1.5, x: 150, y: 193 }); hearts.push(heart); LK.gui.topLeft.addChild(heart); // Create lives counter text var livesText = new Text2('3', { size: 60, fill: 0xFF8C00, font: "'Arial Black', 'Impact', 'Trebuchet MS', sans-serif", fontWeight: '900', stroke: 0x000000, strokeThickness: 25 }); livesText.anchor.set(0.5, 0.5); livesText.x = 250; livesText.y = 193; LK.gui.topLeft.addChild(livesText); // Start constant bouncing animation for lives text function startLivesBounce() { tween(livesText, { y: 183 }, { duration: 600, easing: tween.easeInOut, onFinish: function onFinish() { tween(livesText, { y: 203 }, { duration: 600, easing: tween.easeInOut, onFinish: startLivesBounce }); } }); } startLivesBounce(); ; // Function to show collectibles summary function showCollectiblesSummary() { // Create dark overlay var overlay = LK.getAsset('square_button', { anchorX: 0.5, anchorY: 0.5, scaleX: 30, scaleY: 40, alpha: 0.8, tint: 0x000000, x: 1024, y: 1366 }); game.addChild(overlay); // Create summary panel var summaryPanel = LK.getAsset('square_button', { anchorX: 0.5, anchorY: 0.5, scaleX: 18, scaleY: 15, tint: 0x2F4F4F, x: 1024, y: 1366 }); game.addChild(summaryPanel); // Title text var titleText = new Text2('COLLECTIBLES GATHERED', { size: 80, fill: 0xFFD700, fontWeight: 'bold' }); titleText.anchor.set(0.5, 0.5); titleText.x = 1024; titleText.y = 900; game.addChild(titleText); // Create animated collectible items that can be picked up var summaryItems = []; // Create multiple coin items based on coinCount (max 10 for display) var coinsToShow = Math.min(coinCount, 10); for (var c = 0; c < coinsToShow; c++) { var summaryCoins = LK.getAsset('coin', { anchorX: 0.5, anchorY: 0.5, scaleX: 0.8, scaleY: 0.8, x: 600 + c % 5 * 100, y: 1100 + Math.floor(c / 5) * 80, alpha: 0 }); game.addChild(summaryCoins); summaryItems.push(summaryCoins); // Add floating animation var floatOffset = c * 0.5; tween(summaryCoins, { alpha: 1, y: summaryCoins.y - 20 }, { duration: 500 + c * 100, easing: tween.easeOut, onFinish: function onFinish() { // Continuous floating animation function floatAnimation(coin, offset) { tween(coin, { y: coin.y + 15, rotation: coin.rotation + 0.3 }, { duration: 1000, easing: tween.easeInOut, onFinish: function onFinish() { tween(coin, { y: coin.y - 15, rotation: coin.rotation + 0.3 }, { duration: 1000, easing: tween.easeInOut, onFinish: function onFinish() { floatAnimation(coin, offset); } }); } }); } floatAnimation(summaryCoins, floatOffset); } }); } // Create multiple gem items based on gemCount (max 5 for display) var gemsToShow = Math.min(gemCount, 5); for (var g = 0; g < gemsToShow; g++) { var summaryGems = LK.getAsset('gem', { anchorX: 0.5, anchorY: 0.5, scaleX: 0.6, scaleY: 0.6, x: 700 + g * 120, y: 1350, alpha: 0 }); game.addChild(summaryGems); summaryItems.push(summaryGems); // Add sparkling animation tween(summaryGems, { alpha: 1, scaleX: 0.8, scaleY: 0.8 }, { duration: 600 + g * 150, easing: tween.easeOut, onFinish: function onFinish() { // Continuous sparkling animation function sparkleAnimation(gem) { tween(gem, { alpha: 0.7, scaleX: 0.9, scaleY: 0.9, tint: 0x00FFFF }, { duration: 800, easing: tween.easeInOut, onFinish: function onFinish() { tween(gem, { alpha: 1, scaleX: 0.8, scaleY: 0.8, tint: 0xFFFFFF }, { duration: 800, easing: tween.easeInOut, onFinish: function onFinish() { sparkleAnimation(gem); } }); } }); } sparkleAnimation(summaryGems); } }); } // Coins summary text var coinSummaryText = new Text2('Coins Collected: ' + coinCount, { size: 60, fill: 0xFFD700, fontWeight: 'bold' }); coinSummaryText.anchor.set(0.5, 0.5); coinSummaryText.x = 1024; coinSummaryText.y = 1050; game.addChild(coinSummaryText); // Gems summary text var gemSummaryText = new Text2('Gems Found: ' + gemCount, { size: 60, fill: 0xFF69B4, fontWeight: 'bold' }); gemSummaryText.anchor.set(0.5, 0.5); gemSummaryText.x = 1024; gemSummaryText.y = 1300; game.addChild(gemSummaryText); // Total score var totalText = new Text2('TOTAL SCORE: ' + coinCount, { size: 70, fill: 0x00FF00, fontWeight: 'bold' }); totalText.anchor.set(0.5, 0.5); totalText.x = 1024; totalText.y = 1600; game.addChild(totalText); // Add instruction text var instructionText = new Text2('Your collected treasures!', { size: 50, fill: 0xFFFFFF, fontStyle: 'italic' }); instructionText.anchor.set(0.5, 0.5); instructionText.x = 1024; instructionText.y = 1500; game.addChild(instructionText); // Animate elements appearing tween(overlay, { alpha: 0.8 }, { duration: 500 }); tween(summaryPanel, { scaleX: 18, scaleY: 15 }, { duration: 600, easing: tween.easeOut }); // Clean up summary after delay LK.setTimeout(function () { overlay.destroy(); summaryPanel.destroy(); titleText.destroy(); coinSummaryText.destroy(); gemSummaryText.destroy(); totalText.destroy(); instructionText.destroy(); // Clean up all summary items for (var i = 0; i < summaryItems.length; i++) { summaryItems[i].destroy(); } }, 2500); } ; ; // Spin button removed // Play background music constantly LK.playMusic('Arkaplanmuzik'); // Create endless scrolling background background1 = game.addChild(LK.getAsset('background', { anchorX: 0, anchorY: 0, x: 0, y: 0 })); background2 = game.addChild(LK.getAsset('background', { anchorX: 0, anchorY: 0, x: 2048, y: 0 })); // Create animated ground elements for endless scrolling var ground1 = game.addChild(LK.getAsset('ground', { anchorX: 0, anchorY: 0, x: 0, y: groundY })); var ground2 = game.addChild(LK.getAsset('ground', { anchorX: 0, anchorY: 0, x: 4008, // Position second ground at end of first ground y: groundY })); // Ground animation variables var groundAnimationTimer = 0; // Create starting gate startingGate = new StartingGate(); startingGate.x = 400 + 3 * 10; // Position at 3 meters (3m * 10 pixels per meter) startingGate.y = groundY + 75; // Position gate a little higher above the ground game.addChild(startingGate); // Create player (will be added to foreground later) player = new Player(); player.x = 400; player.y = groundY + 20; player.isInvulnerable = false; // Touch controls for swipe up to jump var touchStartY = null; var minSwipeDistance = 100; // Minimum distance for swipe detection game.down = function (x, y, obj) { touchStartY = y; }; game.up = function (x, y, obj) { if (touchStartY !== null) { var swipeDistance = touchStartY - y; // Positive means swipe up if (swipeDistance >= minSwipeDistance) { // Swipe up detected - make player jump player.jump(); } touchStartY = null; } }; // Spin button interaction removed function spawnCoin() { var coin = new Coin(); coin.x = 2048 + 100; // Randomly place coins either high in air or at medium height to avoid ground-level objects var coinHeightOptions = [groundY - 300 - Math.random() * 100, // High in air groundY - 180 - Math.random() * 80 // Medium height ]; coin.y = coinHeightOptions[Math.floor(Math.random() * coinHeightOptions.length)]; coins.push(coin); game.addChild(coin); } function spawnGem() { var gem = new Gem(); gem.x = 2048 + 100; gem.y = groundY - 80 - Math.random() * 200; gems.push(gem); game.addChild(gem); } function spawnBox() { // Randomly decide if this should be a 2-stage box (30% chance) var isTwoStage = Math.random() < 0.3; if (isTwoStage) { // Create bottom box var bottomBox = new Box(); bottomBox.x = 2048 + 100; bottomBox.y = groundY - 45; // Closer to ground level boxes.push(bottomBox); game.addChild(bottomBox); // Create top box var topBox = new Box(); topBox.x = 2048 + 100; topBox.y = groundY - 45 - 120; // Stack on top (120 pixels higher - increased spacing) boxes.push(topBox); game.addChild(topBox); } else { // Create single box as before var box = new Box(); box.x = 2048 + 100; box.y = groundY - 45; // Closer to ground level boxes.push(box); game.addChild(box); } } function spawnDamageBox() { // 40% chance to spawn double TNTs (overlapping) var isDouble = Math.random() < 0.4; // 25% chance to spawn triple TNTs (with one on top) var isTriple = Math.random() < 0.25; if (isDouble || isTriple) { // Create first TNT var damageBox1 = new DamageBox(); damageBox1.x = 2048 + 100; damageBox1.y = groundY - 45; // Position TNT on ground level like boxes damageBoxes.push(damageBox1); game.addChild(damageBox1); // Create second TNT at same position (slightly offset for visual effect) var damageBox2 = new DamageBox(); damageBox2.x = 2048 + 100 + Math.random() * 20 - 10; // Small random offset damageBox2.y = groundY - 45 + Math.random() * 20 - 10; // Small random offset damageBoxes.push(damageBox2); game.addChild(damageBox2); // Create third TNT on top if triple spawn if (isTriple) { var damageBox3 = new DamageBox(); damageBox3.x = 2048 + 100 + Math.random() * 15 - 7.5; // Small random offset damageBox3.y = groundY - 45 - 120; // Position on top (120 pixels higher like stacked boxes) damageBoxes.push(damageBox3); game.addChild(damageBox3); } } else { // Create single TNT as before var damageBox = new DamageBox(); damageBox.x = 2048 + 100; damageBox.y = groundY - 45; // Position TNT on ground level like boxes damageBoxes.push(damageBox); game.addChild(damageBox); } } game.update = function () { // Increase distance score distanceScore += 1; scoreText.setText(Math.floor(distanceScore / 10) + 'm'); // Gradually increase speed gameSpeed = 8 + distanceScore / 2000; // Update starting gate if (startingGate && startingGate.parent) { startingGate.speed = gameSpeed; // Remove gate when it goes off screen if (startingGate.x < -200) { startingGate.destroy(); startingGate = null; } } // Update end gate if (endGate && endGate.parent) { endGate.speed = gameSpeed; // Remove gate when it goes off screen (after win condition) if (endGate.x < -400) { endGate.destroy(); endGate = null; } } // Move background with game progression background1.x -= gameSpeed * 0.3; // Slower parallax effect background2.x -= gameSpeed * 0.3; // Reset background positions for endless scrolling if (background1.x <= -2048) { background1.x = background2.x + 2048; } if (background2.x <= -2048) { background2.x = background1.x + 2048; } // Move both ground elements with game progression ground1.x -= gameSpeed; ground2.x -= gameSpeed; // Reset ground positions for endless scrolling if (ground1.x <= -4008) { ground1.x = ground2.x + 4008; } if (ground2.x <= -4008) { ground2.x = ground1.x + 4008; } // Animate ground with subtle movement groundAnimationTimer += 0.1; var groundOffset = Math.sin(groundAnimationTimer) * 2; ground1.y = groundY + groundOffset; ground2.y = groundY + groundOffset; // Add slight scale animation to ground var scaleAnimation = 1.0 + Math.sin(groundAnimationTimer * 0.5) * 0.02; ground1.scaleY = scaleAnimation; ground2.scaleY = scaleAnimation; // Update spawn timer spawnTimer++; trailTimer++; // Create trail when player is jumping if (player.isJumping && trailTimer % 3 == 0) { var trail = new Trail(); trail.x = player.x; trail.y = player.y; trail.speed = gameSpeed; trails.push(trail); game.addChild(trail); // Fade out trail tween(trail, { alpha: 0, scaleX: 0.3, scaleY: 0.3 }, { duration: 500, onFinish: function onFinish() { trail.destroy(); } }); } // Spawn additional coins with reduced frequency and adjusted randomness if (spawnTimer % 120 == 0 && Math.random() < 0.4) { spawnCoin(); } // Spawn boxes occasionally if (spawnTimer % 90 == 0 && Math.random() < 0.6) { spawnBox(); } // Spawn damage boxes occasionally (less frequent than regular boxes) if (spawnTimer % 120 == 0 && Math.random() < 0.4) { spawnDamageBox(); } // Spawn crystal at exactly 100 meters var currentDistance = Math.floor(distanceScore / 10); if (currentDistance >= 100 && !crystalSpawned) { spawnGem(); crystalSpawned = true; } // Spawn end gate at exactly 500 meters if (currentDistance >= 500 && !endGateSpawned) { endGate = new EndGate(); endGate.x = 2048 + 200; // Spawn off-screen right endGate.y = groundY + 75; // Same position as starting gate game.addChild(endGate); endGateSpawned = true; } // Check if player crosses the end gate if (endGate && endGate.parent && !endGate.crossed) { if (player.x >= endGate.x - 50 && player.x <= endGate.x + 50) { endGate.triggerWin(); } } // Update and check coins for (var j = coins.length - 1; j >= 0; j--) { var coin = coins[j]; coin.speed = gameSpeed; // Check collection or spin attack var distanceX = coin.x - player.x; var distanceY = coin.y - player.y; var distance = Math.sqrt(distanceX * distanceX + distanceY * distanceY); var isInSpinRange = player.isSpinning && distance <= player.spinDamageRadius; if (!coin.collected && (player.intersects(coin) || isInSpinRange)) { coin.collected = true; coinCount++; LK.setScore(coinCount); coinText.setText(coinCount); LK.getSound('coin').play(); // Visual feedback - enhanced for spin attacks if (isInSpinRange) { LK.effects.flashObject(coin, 0xFF4500, 300); } else { LK.effects.flashObject(coin, 0xFFFFFF, 300); } tween(coin, { alpha: 0, scaleX: 2, scaleY: 2 }, { duration: 300, onFinish: function onFinish() { coin.destroy(); } }); coins.splice(j, 1); continue; } // Remove off-screen coins if (coin.x < -50) { coin.destroy(); coins.splice(j, 1); } } // Update and check gems for (var g = gems.length - 1; g >= 0; g--) { var gem = gems[g]; gem.speed = gameSpeed; // Check collection or spin attack var distanceX = gem.x - player.x; var distanceY = gem.y - player.y; var distance = Math.sqrt(distanceX * distanceX + distanceY * distanceY); var isInSpinRange = player.isSpinning && distance <= player.spinDamageRadius; if (!gem.collected && (player.intersects(gem) || isInSpinRange)) { gem.collected = true; gemCount++; coinCount += 5; // Gems are worth 5 points LK.setScore(coinCount); coinText.setText(coinCount); // Create gem UI elements on first gem collection if (!gemIcon) { gemIcon = LK.getAsset('gem_icon', { anchorX: 0.5, anchorY: 0, x: 150, y: 20 }); LK.gui.top.addChild(gemIcon); gemText = new Text2('0', { size: 60, fill: 0xFF69B4, font: "'Arial Black', 'Impact', 'Trebuchet MS', sans-serif", fontWeight: '900', stroke: 0x000000, strokeThickness: 15 }); gemText.anchor.set(0.5, 0); gemText.x = 150; gemText.y = 110; LK.gui.top.addChild(gemText); } gemText.setText(gemCount); LK.getSound('gem_collect').play(); LK.getSound('happy_giggle').play(); // Fade out gem UI elements after 2 seconds LK.setTimeout(function () { if (gemIcon && gemIcon.parent) { tween(gemIcon, { alpha: 0 }, { duration: 1000, onFinish: function onFinish() { gemIcon.destroy(); gemIcon = null; } }); } if (gemText && gemText.parent) { tween(gemText, { alpha: 0 }, { duration: 1000, onFinish: function onFinish() { gemText.destroy(); gemText = null; } }); } }, 2000); // Visual feedback with particle explosion - enhanced for spin attacks if (isInSpinRange) { LK.effects.flashScreen(0xFF4500, 200); } else { LK.effects.flashScreen(0x00FFFF, 200); } gem.createParticles(); gem.destroy(); gems.splice(g, 1); continue; } // Remove off-screen gems if (gem.x < -50) { gem.destroy(); gems.splice(g, 1); } } // Update and check boxes for (var b = boxes.length - 1; b >= 0; b--) { var box = boxes[b]; box.speed = gameSpeed; // Check collision with player or spin attack var distanceX = box.x - player.x; var distanceY = box.y - player.y; var distance = Math.sqrt(distanceX * distanceX + distanceY * distanceY); var isInSpinRange = player.isSpinning && distance <= player.spinDamageRadius; if (!box.broken && (player.intersects(box) || isInSpinRange)) { box.breakBox(); boxes.splice(b, 1); continue; } // Remove off-screen boxes if (box.x < -50) { box.destroy(); boxes.splice(b, 1); } } // Update and check damage boxes for (var d = damageBoxes.length - 1; d >= 0; d--) { var damageBox = damageBoxes[d]; damageBox.speed = gameSpeed; // Check collision with player (damage boxes can't be destroyed by spin attack) if (!damageBox.damaged && player.intersects(damageBox)) { damageBox.damagePlayer(); damageBoxes.splice(d, 1); continue; } // Remove off-screen damage boxes if (damageBox.x < -50) { damageBox.destroy(); damageBoxes.splice(d, 1); } } // Update and clean up trails for (var k = trails.length - 1; k >= 0; k--) { var trail = trails[k]; trail.speed = gameSpeed; // Remove off-screen or completely faded trails if (trail.x < -100 || trail.alpha <= 0.1) { trail.destroy(); trails.splice(k, 1); } } // Ensure player stays in foreground by re-adding it if (player.parent !== game) { game.addChild(player); } else { // Move player to top of render order game.removeChild(player); game.addChild(player); } };
===================================================================
--- original.js
+++ change.js
@@ -633,9 +633,9 @@
var gems = [];
var boxes = [];
var damageBoxes = [];
var trails = [];
-var gameSpeed = 8;
+var gameSpeed = 4008;
var spawnTimer = 0;
var coinCount = 0;
var gemCount = 0;
var distanceScore = 0;
Just crystal
Just his head
Background, endless, forest, winter, cartoon. In-Game asset. 2d. High contrast. No shadows
Only the line of the ears and the color of the paws should be gray
Only the line of the ears and the color of the paws should be gray
Let C2 have the character's color
Only the line of the ears and the color of the paws should be gray
Delete the character on it
A version without snow
Koyu mavi elips start butonu. In-Game asset. 2d. High contrast. No shadows. In-Game asset. 2d. High contrast. No shadows
Uçan bir dinazor. In-Game asset. 2d. High contrast. No shadows
Alev topu. In-Game asset. 2d. High contrast. No shadows
Mavi top rasengan top. In-Game asset. 2d. High contrast. No shadows
jump
Sound effect
coin
Sound effect
Arkaplanmuzik
Music
gem_collect
Sound effect
happy_giggle
Sound effect
Canazalma
Sound effect
Arkaplanmuzik1
Music
wumpa1
Sound effect
cancan
Sound effect
box_break
Sound effect
tnt_break
Sound effect
enemy_sound
Sound effect
bullet_sound
Sound effect