User prompt
YAZıLARI DüZELT
User prompt
Yazılar karışmasın
User prompt
Please fix the bug: 'Can't find variable: i' in or related to this line: 'segment.height = i === 1 ? 3000 : Math.floor(Math.random() * (4000 - 1200 + 1)) + 1200;' Line Number: 143
User prompt
Remove main menu
User prompt
Please fix the bug: 'TypeError: undefined is not an object (evaluating 'car._move_migrated')' in or related to this line: 'car._move_migrated();' Line Number: 423
User prompt
Please fix the bug: 'undefined is not an object (evaluating 'mainContainer.addChild')' in or related to this line: 'var car = mainContainer.addChild(new Car());' Line Number: 304
User prompt
Fix the game
User prompt
Please fix the bug: 'TypeError: undefined is not an object (evaluating 'roadSegments.length')' in or related to this line: 'if (roadSegments && typeof roadSegments.length === "number") {' Line Number: 515
User prompt
Please fix the bug: 'TypeError: undefined is not an object (evaluating 'roadSegments.length')' in or related to this line: 'for (var i = roadSegments.length - 1; i >= 0; i--) {' Line Number: 515
User prompt
Fix
User prompt
Please fix the bug: 'TypeError: undefined is not an object (evaluating 'mainContainer.x')' in or related to this line: 'mainContainer.x += offsetX;' Line Number: 511
User prompt
Pls Fix
User prompt
Please fix the bug: 'TypeError: undefined is not an object (evaluating 'car.position')' in or related to this line: 'var carLocalPosition = game.toLocal(car.position, car.parent);' Line Number: 502
User prompt
Please fix the bug: 'TypeError: undefined is not an object (evaluating 'car.nonTravelMomentum')' in or related to this line: 'var alphaValue = Math.max(0, Math.min(1, Math.abs(car.nonTravelMomentum) / 5 - 0.5));' Line Number: 481
User prompt
Please fix the bug: 'TypeError: undefined is not an object (evaluating 'roadSegments.forEach')' in or related to this line: 'roadSegments.forEach(function (segment) {' Line Number: 437
User prompt
Please fix the bug: 'TypeError: undefined is not an object (evaluating 'car.x')' in or related to this line: 'var carPosition = {' Line Number: 427
User prompt
Please fix the bug: 'TypeError: undefined is not an object (evaluating 'car._move_migrated')' in or related to this line: 'car._move_migrated();' Line Number: 423
User prompt
Please fix the bug: 'undefined is not an object (evaluating 'mainContainer.addChild')' in or related to this line: 'var car = mainContainer.addChild(new Car());' Line Number: 304
User prompt
Make a main menu
User prompt
Yazılar karışmasın
User prompt
yazılar daha çok olsun
User prompt
yazılar karışmasın
User prompt
drift atmadan yazı gelme sin
User prompt
yazılar daha hızlı geçsin
User prompt
yazılar karışmasın
/**** * Plugins ****/ var tween = LK.import("@upit/tween.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; LK.getSound('Skid').play(); // Show a new driver speech bubble with a random phrase when drifting createDriverSpeechBubble(getRandomTurkishSpeechText()); }; }); 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 (i) { 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 = []; // --- Game objects initialization (immediate, no menu) --- var mainContainer, roadContainer, roadSegments, segmentLength, segmentWidth, currentX, currentY, zigzag; var scoreText; function initializeGameObjects() { mainContainer = game.addChild(new Container()); roadContainer = mainContainer.addChild(new Container()); roadSegments = []; segmentLength = Math.floor(Math.random() * (1000 - 200 + 1)) + 200; segmentWidth = 1200; currentX = 2048 / 2; currentY = 2732 / 2; zigzag = true; for (var i = 1; i <= 15; i++) { game.addRoadSegment(i); } scoreText = new Text2('0', { size: 140, fill: "#fff", font: "'GillSans-Bold',Impact,'Arial Black',Tahoma", weight: 'bold', dropShadow: true, dropShadowColor: '#222', dropShadowBlur: 6, dropShadowAngle: Math.PI / 6, dropShadowDistance: 6, align: 'left' }); scoreText.anchor.set(0, 0); LK.gui.top.addChild(scoreText); } // Immediately initialize game objects and play music initializeGameObjects(); LK.playMusic('backgroundMusic'); var notificationTexts = ['Longing for her warm embrace', 'My love intensifies with each curve', 'Time slips away like smoke', 'Her voice echoes in my mind', 'Desperation sharpens every turn', 'Curves lead to her embrace', 'My passion grows with every turn', 'Time slips, but love persists', 'Desperation sharpens my every move', 'Reunion, the ultimate driving force', 'Is she waiting for me?', 'Where could she be?', 'Can I reach her in time?', 'Will she smile when I arrive?', 'Does she know I am coming?', 'Her embrace is my reward', 'Does she still remember me?', 'Will I see love in her eyes?', 'Does she feel my urgency?', 'Will our love grow stronger?', 'Her voice my guiding star', 'Do I still hold her heart?', 'Can I reach her in time?', 'Does she still believe in us?', 'Will our love conquer all?', 'How fast can I go?', 'Can I push my limits?', 'Will speed get me there?', 'Is haste my driving force?', 'Can I outpace the clock?', 'Is this a race against time?', 'Will acceleration save us?', 'Am I in the fast lane?', 'Can I set a new record?', 'Do I thrive on speed?', 'Will I leave time behind?', 'Am I the fastest driver?', 'Can I reach her swiftly?', 'Loves urgency fuels my speed', 'Every mile brings me closer?', 'Is this road endless or eternal?', 'The stars witness my journey', 'The road hums her name', 'The wind whispers her presence', 'Every turn tests my resolve', 'Her love fuels my engine', 'Can love overcome distance?', 'Is she watching the horizon?', 'Does she dream of our reunion?', 'Will my speed impress her?', 'Will the dawn find us together?', 'Can love conquer the road?', 'Each mile is a heartbeat closer', 'Am I chasing her or myself?', 'Does she feel my approach?', 'The moon guides me to her', 'The horizon holds her promise', 'Will she hear my engine roar?', 'Can I bridge the gap of time?', 'Is this love or obsession?', 'The journey defines our love', 'The asphalt hums beneath my wheels', 'The city fades into a blur', 'Her scent lingers in my memory', 'My headlights pierce the darkness', 'The road stretches like a heartbeat', 'Adrenaline sings through my veins', 'Her laughter fuels my resolve', 'Every corner tests my courage', 'The skyline hides her shadow', 'Is she the prize at the finish line?', 'Each second taunts my longing', 'Will the stars align for us tonight?', 'The road speaks in riddles', 'Do I drive toward hope or despair?', 'Her image dances in my mirrors', 'The engine growls with determination', 'The clock ticks louder with every shift', 'The wind carries her name to me', 'My tires trace a path to her heart', 'The road consumes my thoughts', 'Her love is the compass guiding me', 'Every red light feels like eternity', 'Will my speed match my yearning?', 'Every sign points me closer to her', 'Is this race for love or redemption?', 'The open road promises nothing', 'Her eyes pull me through the haze', 'The horizon burns with her absence', 'Every shadow hides a memory of her', 'The night swallows my doubt', 'Can I tame the chaos within me?', 'The distance mocks my devotion', 'Every street whispers her goodbye', 'The road winds like her gentle touch', 'My resolve tightens with every twist', 'The night’s chill cannot cool my fire', 'Every glance in the mirror spurs me forward', 'The speedometer measures my longing', 'Each turn carves her name into my soul', 'Her absence shapes the road ahead', 'Every second burns', 'Her cry echoes', 'The clock is screaming', 'I cant slow down', 'Her scent fades fast', 'The road bites back', 'Time cuts like a blade', 'She’s slipping away', 'The wind howls her name', 'My grip tightens', 'The tires scream urgency', 'Her face is fading', 'The night won’t wait', 'I’m running out of time', 'The engine roars her name', 'My heart is racing her', 'Every curve fights me', 'I can’t fail her', 'The darkness taunts me', 'Her voice is my lifeline', 'The horizon won’t come closer', 'Every second is agony', 'She needs me now', 'Fate’s breathing down my neck', 'Each turn steals time', 'Her warmth is slipping', 'I won’t let her go', 'The road fights back', 'I can’t be too late', 'Her heartbeat’s fading', 'The stars blur with speed', 'No brakes, just love', 'I’m chasing her shadow', 'Every light burns hope', 'This ride is life or death', 'Her embrace is slipping away', 'The night won’t forgive me', 'I’m on borrowed time', 'The road’s a battlefield']; 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); // Capitalize first letter, rest lowercase for notification return text.charAt(0).toLocaleUpperCase('tr') + text.slice(1).toLocaleLowerCase('tr'); } 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; // Türkçe küfürlü, argo ve kaba trafik konuşmaları var turkishSpeechTexts = ["Yavaş git lan, yol babanın malı mı!", "Önüme kırma, kafayı yedirteceksin!", "Kırmızıda geçenin aklı yok!", "Sinyal versene dangalak!", "Yol vermeyi öğren, terbiyesiz!", "Korna çalma, sabrımı zorlama!", "Telefonla konuşacağına yola bak!", "Şu sollayanı bir yakalasam...", "Yavaşla lan, mezara mı gidiyorsun!", "Trafikte herkesin anası ağlıyor!", "Emniyet şeridi babanın çiftliği mi!", "Kafayı yedirteceksin bana!", "Yolun ortasında durma, deli misin!", "Şu minibüsçüye bak, artist!", "Küfür ettirme bana şimdi!", "Yol ver lan, acelem var!", "Korna çalma, sabrımı taşırma!", "Yavaş git, mezarlıkta yer çok!", "Trafikte herkes psikopat olmuş!", "Şu arabanın yaptığına bak, pes!", "Lan sağa çek, yol ver!", "Önümde uyuma, uyuyacaksan evinde uyu!", "Kafanı cama yapıştırma, yolu izle!", "Şu arabanın yaptığına bak, delirtme adamı!", "Kırmızıda geçtin, aklın nerede senin!", "Sinyal vermek zor mu lan!", "Yavaş git, mezarlıkta yer bol!", "Korna çalıp durma, sabrımı taşırma!", "Şu minibüsçüye bak, yolun kralı sanıyor kendini!", "Yolun ortasında durma, deli misin nesin!", "Küfür ettirme bana sabah sabah!", "Yol ver lan, acelem var!", "Korna çalma, sabrımı taşırma!", "Yavaş git, mezarlıkta yer çok!", "Trafikte herkes psikopat olmuş!", "Şu arabanın yaptığına bak, pes!", "Yavaş git lan, mezara mı gidiyorsun!", "Önüme kırma, kafayı yedirteceksin!", "Kırmızıda geçenin aklı yok!", "Sinyal versene dangalak!", "Yol vermeyi öğren, terbiyesiz!", "Korna çalma, sabrımı zorlama!", "Telefonla konuşacağına yola bak!", "Şu sollayanı bir yakalasam...", "Yavaşla lan, mezara mı gidiyorsun!", "Trafikte herkesin anası ağlıyor!", "Emniyet şeridi babanın çiftliği mi!", "Kafayı yedirteceksin bana!", "Yolun ortasında durma, deli misin!", "Şu minibüsçüye bak, artist!", "Küfür ettirme bana şimdi!", "Yol ver lan, acelem var!", "Korna çalma, sabrımı taşırma!", "Yavaş git, mezarlıkta yer çok!", "Trafikte herkes psikopat olmuş!", "Şu arabanın yaptığına bak, pes!", "Yavaş git lan, yol babanın malı mı!", "Önüme kırma, kafayı yedirteceksin!", "Kırmızıda geçenin aklı yok!", "Sinyal versene dangalak!", "Yol vermeyi öğren, terbiyesiz!", "Korna çalma, sabrımı zorlama!", "Telefonla konuşacağına yola bak!", "Şu sollayanı bir yakalasam...", "Yavaşla lan, mezara mı gidiyorsun!", "Trafikte herkesin anası ağlıyor!", "Emniyet şeridi babanın çiftliği mi!", "Kafayı yedirteceksin bana!", "Yolun ortasında durma, deli misin!", "Şu minibüsçüye bak, artist!", "Küfür ettirme bana şimdi!", "Yol ver lan, acelem var!", "Korna çalma, sabrımı taşırma!", "Yavaş git, mezarlıkta yer çok!", "Trafikte herkes psikopat olmuş!", "Şu arabanın yaptığına bak, pes!", "Yavaş git lan, mezara mı gidiyorsun!", "Önüme kırma, kafayı yedirteceksin!", "Kırmızıda geçenin aklı yok!", "Sinyal versene dangalak!", "Yol vermeyi öğren, terbiyesiz!", "Korna çalma, sabrımı zorlama!", "Telefonla konuşacağına yola bak!", "Şu sollayanı bir yakalasam...", "Yavaşla lan, mezara mı gidiyorsun!", "Trafikte herkesin anası ağlıyor!", "Emniyet şeridi babanın çiftliği mi!", "Kafayı yedirteceksin bana!", "Yolun ortasında durma, deli misin!", "Şu minibüsçüye bak, artist!", "Küfür ettirme bana şimdi!", "Yol ver lan, acelem var!", "Korna çalma, sabrımı taşırma!", "Yavaş git, mezarlıkta yer çok!", "Trafikte herkes psikopat olmuş!", "Şu arabanın yaptığına bak, pes!", "Yavaş git lan, yol babanın malı mı!", "Önüme kırma, kafayı yedirteceksin!", "Kırmızıda geçenin aklı yok!", "Sinyal versene dangalak!", "Yol vermeyi öğren, terbiyesiz!", "Korna çalma, sabrımı zorlama!", "Telefonla konuşacağına yola bak!", "Şu sollayanı bir yakalasam...", "Yavaşla lan, mezara mı gidiyorsun!", "Trafikte herkesin anası ağlıyor!", "Emniyet şeridi babanın çiftliği mi!", "Kafayı yedirteceksin bana!", "Yolun ortasında durma, deli misin!", "Şu minibüsçüye bak, artist!", "Küfür ettirme bana şimdi!", "Yol ver lan, acelem var!", "Korna çalma, sabrımı taşırma!", "Yavaş git, mezarlıkta yer çok!", "Trafikte herkes psikopat olmuş!", "Şu arabanın yaptığına bak, pes!", "Yavaş git lan, mezara mı gidiyorsun!", "Önüme kırma, kafayı yedirteceksin!", "Kırmızıda geçenin aklı yok!", "Sinyal versene dangalak!", "Yol vermeyi öğren, terbiyesiz!", "Korna çalma, sabrımı zorlama!", "Telefonla konuşacağına yola bak!", "Şu sollayanı bir yakalasam...", "Yavaşla lan, mezara mı gidiyorsun!", "Trafikte herkesin anası ağlıyor!", "Emniyet şeridi babanın çiftliği mi!", "Kafayı yedirteceksin bana!", "Yolun ortasında durma, deli misin!", "Şu minibüsçüye bak, artist!", "Küfür ettirme bana şimdi!", "Yol ver lan, acelem var!", "Korna çalma, sabrımı taşırma!", "Yavaş git, mezarlıkta yer çok!", "Trafikte herkes psikopat olmuş!", "Şu arabanın yaptığına bak, pes!", "Yavaş git lan, yol babanın malı mı!", "Önüme kırma, kafayı yedirteceksin!", "Kırmızıda geçenin aklı yok!", "Sinyal versene dangalak!", "Yol vermeyi öğren, terbiyesiz!", "Korna çalma, sabrımı zorlama!", "Telefonla konuşacağına yola bak!", "Şu sollayanı bir yakalasam...", "Yavaşla lan, mezara mı gidiyorsun!", "Trafikte herkesin anası ağlıyor!", "Emniyet şeridi babanın çiftliği mi!", "Kafayı yedirteceksin bana!", "Yolun ortasında durma, deli misin!", "Şu minibüsçüye bak, artist!", "Küfür ettirme bana şimdi!", "Yol ver lan, acelem var!", "Korna çalma, sabrımı taşırma!", "Yavaş git, mezarlıkta yer çok!", "Trafikte herkes psikopat olmuş!", "Şu arabanın yaptığına bak, pes!", "Yavaş git lan, mezara mı gidiyorsun!", "Önüme kırma, kafayı yedirteceksin!", "Kırmızıda geçenin aklı yok!", "Sinyal versene dangalak!", "Yol vermeyi öğren, terbiyesiz!", "Korna çalma, sabrımı zorlama!", "Telefonla konuşacağına yola bak!", "Şu sollayanı bir yakalasam...", "Yavaşla lan, mezara mı gidiyorsun!", "Trafikte herkesin anası ağlıyor!", "Emniyet şeridi babanın çiftliği mi!", "Kafayı yedirteceksin bana!", "Yolun ortasında durma, deli misin!", "Şu minibüsçüye bak, artist!", "Küfür ettirme bana şimdi!", "Yol ver lan, acelem var!", "Korna çalma, sabrımı taşırma!", "Yavaş git, mezarlıkta yer çok!", "Trafikte herkes psikopat olmuş!", "Şu arabanın yaptığına bak, pes!", "Yavaş git lan, mezara mı gidiyorsun!", "Önüme kırma, kafayı yedirteceksin!", "Kırmızıda geçenin aklı yok!", "Sinyal versene dangalak!", "Yol vermeyi öğren, terbiyesiz!", "Korna çalma, sabrımı zorlama!", "Telefonla konuşacağına yola bak!", "Şu sollayanı bir yakalasam...", "Yavaşla lan, mezara mı gidiyorsun!", "Trafikte herkesin anası ağlıyor!", "Emniyet şeridi babanın çiftliği mi!", "Kafayı yedirteceksin bana!", "Yolun ortasında durma, deli misin!", "Şu minibüsçüye bak, artist!", "Küfür ettirme bana şimdi!", "Yol ver lan, acelem var!", "Korna çalma, sabrımı taşırma!", "Yavaş git, mezarlıkta yer çok!", "Trafikte herkes psikopat olmuş!", "Şu arabanın yaptığına bak, pes!", "Yavaş git lan, mezara mı gidiyorsun!", "Önüme kırma, kafayı yedirteceksin!", "Kırmızıda geçenin aklı yok!", "Sinyal versene dangalak!", "Yol vermeyi öğren, terbiyesiz!", "Korna çalma, sabrımı zorlama!", "Telefonla konuşacağına yola bak!", "Şu sollayanı bir yakalasam...", "Yavaşla lan, mezara mı gidiyorsun!", "Trafikte herkesin anası ağlıyor!", "Emniyet şeridi babanın çiftliği mi!", "Kafayı yedirteceksin bana!", "Yolun ortasında durma, deli misin!", "Şu minibüsçüye bak, artist!", "Küfür ettirme bana şimdi!", "Yol ver lan, acelem var!", "Korna çalma, sabrımı taşırma!", "Yavaş git, mezarlıkta yer çok!", "Trafikte herkes psikopat olmuş!", "Şu arabanın yaptığına bak, pes!"]; var usedTurkishSpeechTexts = []; function getRandomTurkishSpeechText() { if (turkishSpeechTexts.length === 0) { turkishSpeechTexts = usedTurkishSpeechTexts.splice(0, usedTurkishSpeechTexts.length); } var idx = Math.floor(Math.random() * turkishSpeechTexts.length); var txt = turkishSpeechTexts.splice(idx, 1)[0]; usedTurkishSpeechTexts.push(txt); // Capitalize first letter, rest lowercase for Turkish return txt.charAt(0).toLocaleUpperCase('tr') + txt.slice(1).toLocaleLowerCase('tr'); } // Allow multiple speech bubbles at once, stacking vertically and fading independently, but never overlapping var driverSpeechBubbles = []; var maxDriverSpeechBubbles = 8; // Show up to 8 at once var driverSpeechBubbleSpacing = 60; // px vertical spacing (tighter) function findAvailableSpeechBubbleSlot() { // Find the first available slot (0 to maxDriverSpeechBubbles-1) not currently used var usedSlots = []; for (var i = 0; i < driverSpeechBubbles.length; i++) { usedSlots.push(driverSpeechBubbles[i]._bubbleSlot); } for (var slot = 0; slot < maxDriverSpeechBubbles; slot++) { if (usedSlots.indexOf(slot) === -1) return slot; } // If all slots are used, return the slot of the oldest bubble (FIFO replacement) if (driverSpeechBubbles.length > 0) { return driverSpeechBubbles[0]._bubbleSlot; } return 0; } // Helper to update all bubble positions to avoid overlap function updateDriverSpeechBubblePositions() { // Sort bubbles by their slot driverSpeechBubbles.sort(function (a, b) { return a._bubbleSlot - b._bubbleSlot; }); for (var i = 0; i < driverSpeechBubbles.length; i++) { var bubble = driverSpeechBubbles[i]; bubble.y = -350 - bubble._bubbleSlot * driverSpeechBubbleSpacing; } } function createDriverSpeechBubble(text) { var slot = findAvailableSpeechBubbleSlot(); // If all slots are full, remove the oldest bubble in the slot we're about to use // Remove any existing bubble in this slot to prevent overlap for (var i = 0; i < driverSpeechBubbles.length; i++) { if (driverSpeechBubbles[i]._bubbleSlot === slot) { driverSpeechBubbles[i].destroy(); driverSpeechBubbles.splice(i, 1); break; } } updateDriverSpeechBubblePositions(); // Always update after removal var bubble = new Text2(text.charAt(0).toLocaleUpperCase('tr') + text.slice(1).toLocaleLowerCase('tr'), // Proper Turkish casing { size: 64, fill: "#fff", font: "'GillSans-Bold',Impact,'Arial Black',Tahoma", weight: 'bold', dropShadow: true, dropShadowColor: '#222', dropShadowBlur: 6, dropShadowAngle: Math.PI / 6, dropShadowDistance: 6, align: 'center', wordWrap: true, wordWrapWidth: 540 }); bubble.anchor.set(0.5, 1); bubble.x = 0; bubble._bubbleSlot = slot; bubble.alpha = 0; driver.addChild(bubble); // Add to array before updating positions driverSpeechBubbles.push(bubble); // Always update positions after adding a new bubble to prevent overlap updateDriverSpeechBubblePositions(); // Animate in tween(bubble, { alpha: 1 }, { duration: 200 }); // Animate out after 0.7s (even faster) LK.setTimeout(function () { tween(bubble, { alpha: 0 }, { duration: 120 }); // Remove from array and container after fade out LK.setTimeout(function () { var idx = driverSpeechBubbles.indexOf(bubble); if (idx !== -1) { driverSpeechBubbles.splice(idx, 1); bubble.destroy(); } // Always update positions after removal to prevent overlap updateDriverSpeechBubblePositions(); }, 120); }, 700); } // Speech bubbles now only appear on drift (direction change), not periodically var isGameOver = false; var score = 0; var closestSegment = null; game.on('down', function (x, y, obj) { car.changeDirection(); }); 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()); } if (!carIsOnRoad) { LK.showGameOver(); } else {} 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(0); } } }); //Minimalistic tween library which should be used for animations over time, including tinting / colouring an object, scaling, rotating, or changing any game object property.
===================================================================
--- original.js
+++ change.js
@@ -166,16 +166,18 @@
for (var i = 1; i <= 15; i++) {
game.addRoadSegment(i);
}
scoreText = new Text2('0', {
- size: 150,
- fill: 0xFFFFFF,
- weight: '800',
+ size: 140,
+ fill: "#fff",
+ font: "'GillSans-Bold',Impact,'Arial Black',Tahoma",
+ weight: 'bold',
dropShadow: true,
- dropShadowColor: '#373330',
- dropShadowBlur: 4,
+ dropShadowColor: '#222',
+ dropShadowBlur: 6,
dropShadowAngle: Math.PI / 6,
- dropShadowDistance: 6
+ dropShadowDistance: 6,
+ align: 'left'
});
scoreText.anchor.set(0, 0);
LK.gui.top.addChild(scoreText);
}
@@ -190,9 +192,10 @@
}
var index = Math.floor(Math.random() * notificationTexts.length);
var text = notificationTexts.splice(index, 1)[0];
usedNotificationTexts.push(text);
- return text;
+ // Capitalize first letter, rest lowercase for notification
+ return text.charAt(0).toLocaleUpperCase('tr') + text.slice(1).toLocaleLowerCase('tr');
}
var car = mainContainer.addChild(new Car());
car.x = 2048 / 2;
car.y = 2732 / 2;
@@ -208,9 +211,10 @@
}
var idx = Math.floor(Math.random() * turkishSpeechTexts.length);
var txt = turkishSpeechTexts.splice(idx, 1)[0];
usedTurkishSpeechTexts.push(txt);
- return txt;
+ // Capitalize first letter, rest lowercase for Turkish
+ return txt.charAt(0).toLocaleUpperCase('tr') + txt.slice(1).toLocaleLowerCase('tr');
}
// Allow multiple speech bubbles at once, stacking vertically and fading independently, but never overlapping
var driverSpeechBubbles = [];
var maxDriverSpeechBubbles = 8; // Show up to 8 at once
@@ -252,20 +256,23 @@
break;
}
}
updateDriverSpeechBubblePositions(); // Always update after removal
- var bubble = new Text2(text, {
- size: 70,
- fill: 0x222222,
+ var bubble = new Text2(text.charAt(0).toLocaleUpperCase('tr') + text.slice(1).toLocaleLowerCase('tr'),
+ // Proper Turkish casing
+ {
+ size: 64,
+ fill: "#fff",
+ font: "'GillSans-Bold',Impact,'Arial Black',Tahoma",
weight: 'bold',
dropShadow: true,
- dropShadowColor: '#fff',
- dropShadowBlur: 4,
+ dropShadowColor: '#222',
+ dropShadowBlur: 6,
dropShadowAngle: Math.PI / 6,
- dropShadowDistance: 4,
+ dropShadowDistance: 6,
align: 'center',
wordWrap: true,
- wordWrapWidth: 500
+ wordWrapWidth: 540
});
bubble.anchor.set(0.5, 1);
bubble.x = 0;
bubble._bubbleSlot = slot;