User prompt
start music when retry
User prompt
start music from beginning after game over screen
User prompt
sounds shouldn't overlap
User prompt
play it again after skid sound
User prompt
play it again when touching the screen
User prompt
add engine sound
User prompt
center the text
User prompt
change the list "I'm trying. We can't change what's done. Be loyal to what matters. I gave you all I had. I tried, in the end. I did. You, sir, are a fish. LENNNNAAAAYYYY! Vengeance is an idiot's game. We're more ghosts than people. Oh, and a quarter. Don't forget the quarter. Yeah, I got TB. I guess I... I'm afraid."
User prompt
Please fix the bug: 'tween.to is not a function' in or related to this line: 'tween.to(carGraphics.scale, {' Line Number: 41 ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
can you add running animation
User prompt
change the list with this "Gonuşma layn! Yürü git layn! Ne bahıyon? Salih Abi, bana bi' yolluk yap. Hocam sana gafam girsin. O da demiş ki o benim. Bir zamaaanlar halım vaktım... Bir zamaaaanlar, bir zamaaaanlar ... Cohsohtun chek! Kofik, bu işin duayeni bu adam! Oramagoma buramago! Galaksinin en sıcak, sıcak sıcak pizzası! Cimri şişman bencil pislik Paylaşcılıksızlık! Akülü araba mı bu? Benim canım yanmaz gardaş. Gusam mı hocam?"
User prompt
change the list with this "Gonuşma layn! Yürü git layn! Ne bahıyon? Salih Abi, bana bi' yolluk yap. Hocam sana gafam girsin. Testesteronlarım! Akülü araba mı bu? Benim canım yanmaz gardas. Gusam mı hocam?"
User prompt
change the texts with this list. "Salih abi bi yolluk yap. Benim canım yanmaz gardas. Gusam mı hocam? Böyle mi yani yan çıkılıyor, böyle mi arkadaşlık olunuyor yani böyle mi yani? Anam, benim babamın resminin ne işi var senin bilgisayarında? Çözülmez oğlum."
User prompt
play the crash sound once.
User prompt
stop the car when going off the road
User prompt
play crash sound. delay 1 scnds and show game over screen
User prompt
play crash when hitting obstacle
User prompt
add crash sound for game over
User prompt
Please fix the bug: 'storage.get is not a function' in or related to this line: 'var highScore = storage.get('highScore') || 0;' Line Number: 190 ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
Please fix the bug: 'storage is not defined' in or related to this line: 'var highScore = storage.get('highScore') || 0;' Line Number: 184 ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
add high score below the score with small size.
Remix started
Copy Drifting Love
/**** * Plugins ****/ var storage = LK.import("@upit/storage.v1"); /**** * Classes ****/ var Car = Container.expand(function () { var self = Container.call(this); self.projectMovement = function (vector) { var angle = -Math.PI / 4; var cosAngle = Math.cos(angle); var sinAngle = Math.sin(angle); return { x: vector.x * cosAngle - vector.y * sinAngle, y: vector.x * sinAngle + vector.y * cosAngle }; }; var carGraphics = self.attachAsset('car', { anchorX: 0.5, anchorY: 0.5 }); self.ORIGINAL_SPEED = 2; self.speed = self.ORIGINAL_SPEED; self.direction = 0; self.momentum = { x: 0, y: 0 }; self._move_migrated = function () { var momentumModifier = 0.1; self.speed *= 1.01; if (self.direction === 0) { self.momentum.x += self.speed * momentumModifier; } else { self.momentum.y -= self.speed * momentumModifier; } var projectedMovement = self.projectMovement(self.momentum); self.x += projectedMovement.x; self.y += projectedMovement.y; var nonTravelMomentum; if (self.direction === 0) { self.momentum.x *= 0.98; self.momentum.y *= 0.95; nonTravelMomentum = self.momentum.y; } else { self.momentum.x *= 0.95; self.momentum.y *= 0.98; nonTravelMomentum = self.momentum.x; } self.nonTravelMomentum = nonTravelMomentum; }; self.changeDirection = function () { self.direction = self.direction === 0 ? 1 : 0; self.speed = self.ORIGINAL_SPEED; carGraphics.scale.x *= -1; var skidSound = LK.getSound('Skid'); skidSound.play(); skidSound.on('end', function () { var engineSound = LK.getSound('Engine'); engineSound.stop(); engineSound.play({ loop: true }); }); }; }); var Driver = Container.expand(function () { var self = Container.call(this); self.x = +1500; self.y = +1500; var driverGraphics = self.attachAsset('driver', { anchorX: 0.5, anchorY: 0.5 }); }); var Particle = Container.expand(function () { var self = Container.call(this); var particleGraphics = self.attachAsset('particle', { anchorX: 0.5, anchorY: 0.5 }); particleGraphics.rotation = Math.PI / 4; self.lifetime = 100; self.tick = function () { if (--self.lifetime <= 0) { self.destroy(); } }; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x000000 }); /**** * Game Code ****/ game.calculateDistanceToPoint = function (point, segmentStart, segmentEnd) { var A = point.x - segmentStart.x; var B = point.y - segmentStart.y; var C = segmentEnd.x - segmentStart.x; var D = segmentEnd.y - segmentStart.y; var dot = A * C + B * D; var len_sq = C * C + D * D; var param = -1; if (len_sq != 0) { param = dot / len_sq; } var xx, yy; if (param < 0) { xx = segmentStart.x; yy = segmentStart.y; } else if (param > 1) { xx = segmentEnd.x; yy = segmentEnd.y; } else { xx = segmentStart.x + param * C; yy = segmentStart.y + param * D; } var dx = point.x - xx; var dy = point.y - yy; return Math.sqrt(dx * dx + dy * dy); }; game.addRoadSegment = function () { var lastSegment = roadSegments[roadSegments.length - 1]; zigzag = !zigzag; var segment = roadContainer.attachAsset('roadSegment', { anchorX: 0.5 }); segment.width = segmentWidth; segmentWidth = Math.max(350, segmentWidth - 15); segment.height = i === 1 ? 3000 : Math.floor(Math.random() * (4000 - 1200 + 1)) + 1200; segment.rotation = zigzag ? -Math.PI - Math.PI / 4 : -Math.PI + Math.PI / 4; segment.y = currentY; segment.x = currentX; var adjustedHeight = segment.height - segmentWidth / 2; currentY += adjustedHeight * Math.cos(segment.rotation); currentX -= adjustedHeight * Math.sin(segment.rotation); segment.shadow = roadContainer.attachAsset('roadSegmentShadow', { anchorX: 0.5 }); segment.shadow.width = segment.width; segment.shadow.height = segment.height; segment.shadow.rotation = segment.rotation; segment.shadow.x = segment.x; segment.shadow.y = segment.y + 50; segment.shadow.alpha = 1; segment.used = false; roadSegments.push(segment); roadContainer.addChildAt(segment.shadow, 0); roadContainer.addChild(segment); }; game.setBackgroundColor(0xc39977); var particles = []; LK.playMusic('backgroundMusic'); var mainContainer = game.addChild(new Container()); var engineSound = LK.getSound('Engine'); engineSound.stop(); engineSound.play({ loop: true }); var roadContainer = mainContainer.addChild(new Container()); var roadSegments = []; var segmentLength = Math.floor(Math.random() * (1000 - 200 + 1)) + 200; var segmentWidth = 1200; var currentX = 2048 / 2; var currentY = 2732 / 2; var zigzag = true; for (var i = 1; i <= 15; i++) { game.addRoadSegment(); } var scoreText = new Text2('0', { size: 150, fill: 0xFFFFFF, weight: '800', dropShadow: true, dropShadowColor: '#373330', dropShadowBlur: 4, dropShadowAngle: Math.PI / 6, dropShadowDistance: 6 }); scoreText.anchor.set(0, 0); LK.gui.top.addChild(scoreText); // Import storage plugin // High score text, smaller and below the main score var highScore = storage.highScore || 0; var highScoreText = new Text2('High: ' + highScore, { size: 60, fill: 0xFFFFFF, weight: '400', dropShadow: true, dropShadowColor: '#373330', dropShadowBlur: 2, dropShadowAngle: Math.PI / 6, dropShadowDistance: 3 }); highScoreText.anchor.set(0, 0); // Position just below the scoreText (scoreText is 150px tall, add a little margin) highScoreText.y = scoreText.height + 10; LK.gui.top.addChild(highScoreText); var notificationTexts = ["I'm trying.", "We can't change what's done.", "Be loyal to what matters.", "I gave you all I had.", "I tried, in the end. I did.", "You, sir, are a fish.", "LENNNNAAAAYYYY!", "Vengeance is an idiot's game.", "We're more ghosts than people.", "Oh, and a quarter. Don't forget the quarter.", "Yeah, I got TB.", "I guess I... I'm afraid."]; var usedNotificationTexts = []; function getRandomNotificationText() { if (notificationTexts.length === 0) { notificationTexts = usedNotificationTexts.splice(0, usedNotificationTexts.length); } var index = Math.floor(Math.random() * notificationTexts.length); var text = notificationTexts.splice(index, 1)[0]; usedNotificationTexts.push(text); return text; } var notificationText = new Text2(getRandomNotificationText(), { size: 60, fill: 0xFFFFFF, weight: '400', align: 'center', stroke: '#000000', strokeThickness: 8 }); notificationText.anchor.set(0, 4); notificationText.x -= 350; LK.gui.bottom.addChild(notificationText); var car = mainContainer.addChild(new Car()); car.x = 2048 / 2; car.y = 2732 / 2; var driver = LK.gui.addChild(new Driver()); driver.x = 250; driver.y = 1800; var isGameOver = false; var score = 0; var closestSegment = null; game.on('down', function (x, y, obj) { car.changeDirection(); var engineSound = LK.getSound('Engine'); engineSound.stop(); engineSound.play({ loop: true }); }); LK.on('retry', function () { LK.playMusic('backgroundMusic', { loop: true }); }); LK.on('tick', function () { car._move_migrated(); var carIsOnRoad = false; var carPosition = { x: car.x, y: car.y }; var currentClosestSegment = null; var currentClosestDistance = Infinity; roadSegments.forEach(function (segment) { var segmentStart = { x: segment.x + Math.sin(segment.rotation) * 100, y: segment.y - Math.cos(segment.rotation) * 100 }; var segmentEnd = { x: segment.x - Math.sin(segment.rotation) * (segment.height - segment.width / 2), y: segment.y + Math.cos(segment.rotation) * (segment.height - segment.width / 2) }; var distance = game.calculateDistanceToPoint(carPosition, segmentStart, segmentEnd); if (distance < currentClosestDistance) { currentClosestDistance = distance; currentClosestSegment = segment; } if (distance < segment.width / 2 - 50) { carIsOnRoad = true; } }); if (closestSegment !== currentClosestSegment && !currentClosestSegment.used) { closestSegment = currentClosestSegment; closestSegment.used = true; score++; car.ORIGINAL_SPEED += 0.1; scoreText.setText(score.toString()); // Update high score if needed if (score > highScore) { highScore = score; storage.highScore = highScore; highScoreText.setText('High: ' + highScore); } notificationText.setText(getRandomNotificationText()); } if (!carIsOnRoad) { // Play crash sound only once if (!car.crashPlayed) { car.crashPlayed = true; LK.getSound('Crash').play(); // Stop the car's movement car.speed = 0; car.momentum.x = 0; car.momentum.y = 0; LK.setTimeout(function () { LK.showGameOver(); LK.playMusic('backgroundMusic', { loop: true }); // Restart music from beginning after game over }, 1000); } } else { // Reset crashPlayed if back on road (optional, in case of future logic) car.crashPlayed = false; } var particleOffsets = [{ x: 20, y: 140 }, { x: 20 + 100, y: 140 - 100 }, { x: 20 - 150, y: 140 - 150 }, { x: 20 - 150 + 100, y: 140 - 150 - 100 }]; for (var i = 0; i < particleOffsets.length; i++) { var alphaValue = Math.max(0, Math.min(1, Math.abs(car.nonTravelMomentum) / 5 - 0.5)); if (alphaValue > 0) { var particle = new Particle(); particle.alpha = alphaValue; var noiseX = (Math.random() - 0.5) * 10; var noiseY = (Math.random() - 0.5) * 10; particle.x = car.x + (car.direction === 0 ? -1 : 1) * particleOffsets[i].x + noiseX; particle.y = car.y + particleOffsets[i].y + noiseY; mainContainer.addChildAt(particle, 1); particles.push(particle); } } particles.forEach(function (particle, index) { particle.tick(); if (particle.lifetime <= 0) { particles.splice(index, 1); } }); var carLocalPosition = game.toLocal(car.position, car.parent); var offsetX = (2048 / 2 - carLocalPosition.x) / 20; var offsetY = (2732 - 450 - carLocalPosition.y) / 20; mainContainer.x += offsetX; mainContainer.y += offsetY; for (var i = roadSegments.length - 1; i >= 0; i--) { var segmentGlobalPosition = game.toLocal(roadSegments[i].position, roadSegments[i].parent); if (segmentGlobalPosition.y - roadSegments[i].height > 2732 * 2) { roadSegments[i].shadow.destroy(); roadSegments[i].destroy(); roadSegments.splice(i, 1); game.addRoadSegment(); } } });
===================================================================
--- original.js
+++ change.js
@@ -241,8 +241,13 @@
engineSound.play({
loop: true
});
});
+LK.on('retry', function () {
+ LK.playMusic('backgroundMusic', {
+ loop: true
+ });
+});
LK.on('tick', function () {
car._move_migrated();
var carIsOnRoad = false;
var carPosition = {