User prompt
istatistik menüsünü kaldır sil
User prompt
ARTIFICIAL INTELLIGENCE NORMALLY CANNOT GET POINTS FIX
User prompt
Close STATISTICS WINDOW ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
STATISTICS WINDOW should be kept on a separate side and the Menu should be kept on a separate side. ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
IF YOU CLICK ON THE KEMALDEV ARTICLE 3 TIMES, THE ARTIFICIAL INTELLIGENCE WILL NOT GET ANY POINTS ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
Show statistics window in large size at the end of the game ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
If you tap the KEMALDEV text 3 times, you will get 4 times the score and the artificial intelligence will reduce your score by 90 percent. ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
pull down statistics window ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Bring statistics to the menu ↪💡 Consider importing and using the following plugins: @upit/storage.v1, @upit/tween.v1
User prompt
The text in the menu should move but not too much ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Let the ground return to its former state
User prompt
Write your best score ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
make the floor look old
User prompt
The graphics are very simple and bring life ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
The play area is too small, fix it, make it like gta 2
User prompt
expand player's location expand AI's location
User prompt
take the place of artificial intelligence down and draw a line between
User prompt
Let the AI have a place like the player below
User prompt
Let the rng that the AI throws appear flat
User prompt
Let there be an artificial intelligence competing with us in the gameLet there be an artificial intelligence competing with us in the game
User prompt
raise your game a little bit
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var AICompetitor = Container.expand(function () {
var self = Container.call(this);
var aiDisplay = self.attachAsset('numberDisplay', {
anchorX: 0.5,
anchorY: 0.5
});
aiDisplay.tint = 0xff6b6b; // Red tint for AI
var aiText = new Text2('AI', {
size: 40,
fill: 0xFFFFFF
});
aiText.anchor.set(0.5, 0.5);
aiText.y = -80;
self.addChild(aiText);
var aiNumberText = new Text2('?', {
size: 60,
fill: 0xFFFFFF
});
aiNumberText.anchor.set(0.5, 0.5);
self.addChild(aiNumberText);
self.currentNumber = 0;
self.aiScore = 0;
self.aiStreak = 0;
self.lastAttemptTime = 0;
self.difficulty = 1;
// AI intelligence parameters
self.reactionTime = 1000; // Base reaction time in ms
self.accuracy = 0.7; // Base accuracy (70%)
self.patternMemory = [];
self.setDifficulty = function (diff) {
self.difficulty = diff;
// Adjust AI parameters based on difficulty
if (diff <= 3) {
self.reactionTime = 1500 - diff * 100; // Slower at lower difficulties
self.accuracy = 0.5 + diff * 0.1; // Less accurate
} else if (diff <= 7) {
self.reactionTime = 1200 - diff * 50;
self.accuracy = 0.6 + diff * 0.05;
} else {
self.reactionTime = 800; // Very fast at high difficulty
self.accuracy = 0.85; // Very accurate
}
};
self.generateNumber = function () {
self.currentNumber = Math.floor(Math.random() * 100) + 1;
aiNumberText.setText(self.currentNumber.toString());
// Add subtle pulse animation to AI number generation
tween(aiNumberText, {
scaleX: 1.2,
scaleY: 1.2
}, {
duration: 200,
easing: tween.easeOut,
onFinish: function onFinish() {
tween(aiNumberText, {
scaleX: 1.0,
scaleY: 1.0
}, {
duration: 300,
easing: tween.bounceOut
});
}
});
// Subtle color flash for AI display
tween(aiDisplay, {
tint: 0xff9999
}, {
duration: 150,
easing: tween.easeOut,
onFinish: function onFinish() {
tween(aiDisplay, {
tint: 0xff6b6b
}, {
duration: 200,
easing: tween.easeIn
});
}
});
};
self.attemptMatch = function (targetPattern) {
var currentTime = Date.now();
if (currentTime - self.lastAttemptTime < self.reactionTime) {
return false; // Still in cooldown
}
// AI decision making with some randomness
var shouldAttempt = Math.random() < 0.3; // 30% chance to attempt each update
if (!shouldAttempt) return false;
self.lastAttemptTime = currentTime;
// Smart number generation based on pattern
var targetNumber = self.generateSmartNumber(targetPattern);
if (targetNumber !== null) {
self.currentNumber = targetNumber;
} else {
// Fallback to random if can't determine good number
self.generateNumber();
return false;
}
aiNumberText.setText(self.currentNumber.toString());
// Check if AI's number matches the pattern
var isMatch = targetPattern.checkMatch(self.currentNumber);
// Add some inaccuracy - AI might miss even when it should match
if (isMatch && Math.random() > self.accuracy) {
isMatch = false; // AI missed due to inaccuracy
}
if (isMatch) {
self.aiStreak++;
var aiMultiplier = Math.min(5, 1 + Math.floor(self.aiStreak / 3));
var points = targetPattern.points * aiMultiplier;
self.aiScore += points;
// Visual feedback for AI success
tween(self, {
rotation: Math.PI
}, {
duration: 400,
easing: tween.easeOut
});
// Success particles
if (typeof particleSystem !== 'undefined') {
particleSystem.burst(self.x, self.y, 0xff6b6b, 8);
}
return true;
} else {
// AI missed - reset streak
if (self.aiStreak > 0) {
self.aiStreak = 0;
}
return false;
}
};
self.generateSmartNumber = function (targetPattern) {
// AI tries to be smart about number generation
if (targetPattern.targetMin === targetPattern.targetMax) {
// Divisible pattern
var divisor = targetPattern.targetMin;
var multiple = Math.floor(Math.random() * (100 / divisor)) + 1;
return multiple * divisor;
} else if (targetPattern.targetMin === 1 || targetPattern.targetMin === 2) {
// Even/Odd pattern
if (targetPattern.targetMin === 2) {
// Even number needed
return (Math.floor(Math.random() * 50) + 1) * 2;
} else {
// Odd number needed
return Math.floor(Math.random() * 50) * 2 + 1;
}
} else {
// Range pattern
var range = targetPattern.targetMax - targetPattern.targetMin + 1;
return targetPattern.targetMin + Math.floor(Math.random() * range);
}
};
return self;
});
var NumberDisplay = Container.expand(function () {
var self = Container.call(this);
var bg = self.attachAsset('numberDisplay', {
anchorX: 0.5,
anchorY: 0.5
});
var numberText = new Text2('?', {
size: 80,
fill: 0xFFFFFF
});
numberText.anchor.set(0.5, 0.5);
self.addChild(numberText);
self.currentNumber = 0;
self.generateNumber = function () {
self.currentNumber = Math.floor(Math.random() * 100) + 1;
numberText.setText(self.currentNumber.toString());
// Enhanced pulse with rainbow color cycling
tween(self, {
scaleX: 1.4,
scaleY: 1.4,
rotation: 0.2
}, {
duration: 150,
easing: tween.easeOut
});
tween(self, {
scaleX: 1.0,
scaleY: 1.0,
rotation: 0
}, {
duration: 400,
easing: tween.bounceOut
});
// Multi-color flash sequence
tween(bg, {
tint: 0xfd79a8
}, {
duration: 80,
easing: tween.easeOut,
onFinish: function onFinish() {
tween(bg, {
tint: 0x74b9ff
}, {
duration: 80,
easing: tween.easeOut,
onFinish: function onFinish() {
tween(bg, {
tint: 0x6c5ce7
}, {
duration: 150,
easing: tween.easeIn
});
}
});
}
});
// Text glow effect
tween(numberText, {
tint: 0xfdcb6e
}, {
duration: 100,
easing: tween.easeOut
});
tween(numberText, {
tint: 0xffffff
}, {
duration: 200,
easing: tween.easeIn
});
};
return self;
});
var Particle = Container.expand(function () {
var self = Container.call(this);
var particle = self.attachAsset('numberDisplay', {
anchorX: 0.5,
anchorY: 0.5
});
self.vx = 0;
self.vy = 0;
self.life = 1.0;
self.decay = 0.02;
self.init = function (color, size) {
particle.tint = color;
self.scaleX = size;
self.scaleY = size;
self.alpha = 0.9;
// Enhanced random velocity with more dynamic movement
self.vx = (Math.random() - 0.5) * 15;
self.vy = (Math.random() - 0.5) * 15 - 8;
// Add rotation for more dynamic particles
self.rotation = Math.random() * Math.PI * 2;
self.rotationSpeed = (Math.random() - 0.5) * 0.3;
};
self.update = function () {
self.x += self.vx;
self.y += self.vy;
self.vy += 0.3; // gravity
self.vx *= 0.99; // air resistance
self.life -= self.decay;
self.alpha = self.life * 0.8;
self.scaleX *= 0.97;
self.scaleY *= 0.97;
// Add rotation animation
self.rotation += self.rotationSpeed;
// Color shifting effect as particle fades
var lifeFactor = self.life;
if (lifeFactor > 0.5) {
particle.tint = particle.tint; // Keep original color
} else {
// Fade to warm colors
var fadeAmount = (0.5 - lifeFactor) * 2;
particle.tint = 0xfdcb6e * fadeAmount + particle.tint * (1 - fadeAmount);
}
if (self.life <= 0) {
self.destroy();
}
};
return self;
});
var ParticleSystem = Container.expand(function () {
var self = Container.call(this);
var particles = [];
self.burst = function (x, y, color, count) {
for (var i = 0; i < count; i++) {
var particle = new Particle();
particle.x = x;
particle.y = y;
particle.init(color, Math.random() * 0.3 + 0.2);
particles.push(particle);
self.addChild(particle);
}
};
self.update = function () {
for (var i = particles.length - 1; i >= 0; i--) {
if (particles[i].life <= 0) {
particles.splice(i, 1);
}
}
};
return self;
});
var StartMenu = Container.expand(function () {
var self = Container.call(this);
// Background overlay with gradient effect
var bg = self.attachAsset('tapArea', {
anchorX: 0.5,
anchorY: 0.5,
alpha: 0.95
});
bg.tint = 0x2d3436;
// Add title background for better contrast
var titleBg = self.attachAsset('titleBg', {
anchorX: 0.5,
anchorY: 0.5,
alpha: 0.8
});
titleBg.y = -300;
titleBg.tint = 0x636e72;
self.addChild(titleBg);
// Title with enhanced styling
var titleText = new Text2(getText('title'), {
size: 85,
fill: 0xfdcb6e
});
titleText.anchor.set(0.5, 0.5);
titleText.x = 0;
titleText.y = -300;
self.addChild(titleText);
// Add subtitle glow effect
var titleGlow = new Text2(getText('title'), {
size: 87,
fill: 0xffffff
});
titleGlow.anchor.set(0.5, 0.5);
titleGlow.x = 0;
titleGlow.y = -300;
titleGlow.alpha = 0.3;
self.addChild(titleGlow);
self.addChild(titleText); // Ensure title is on top
// Instructions
var instructText = new Text2(getText('instructions'), {
size: 50,
fill: 0xCCCCCC
});
instructText.anchor.set(0.5, 0.5);
instructText.y = 100;
self.addChild(instructText);
// Entrance animations
self.show = function () {
self.alpha = 0;
self.scaleX = 0.8;
self.scaleY = 0.8;
tween(self, {
alpha: 1,
scaleX: 1,
scaleY: 1
}, {
duration: 800,
easing: tween.bounceOut
});
// Pulse title
var _pulseTitleAnim = function pulseTitleAnim() {
tween(titleText, {
scaleX: 1.1,
scaleY: 1.1
}, {
duration: 1000,
easing: tween.easeInOut,
onFinish: function onFinish() {
tween(titleText, {
scaleX: 1,
scaleY: 1
}, {
duration: 1000,
easing: tween.easeInOut,
onFinish: _pulseTitleAnim
});
}
});
};
LK.setTimeout(_pulseTitleAnim, 500);
// Slow left-right movement for title text
var _titleMoveAnim = function titleMoveAnim() {
tween(titleText, {
x: 30
}, {
duration: 3000,
easing: tween.easeInOut,
onFinish: function onFinish() {
tween(titleText, {
x: -30
}, {
duration: 3000,
easing: tween.easeInOut,
onFinish: function onFinish() {
tween(titleText, {
x: 0
}, {
duration: 3000,
easing: tween.easeInOut,
onFinish: _titleMoveAnim
});
}
});
}
});
};
LK.setTimeout(_titleMoveAnim, 1000);
// Slow left-right movement for title glow (synchronized)
var _titleGlowMoveAnim = function titleGlowMoveAnim() {
tween(titleGlow, {
x: 30
}, {
duration: 3000,
easing: tween.easeInOut,
onFinish: function onFinish() {
tween(titleGlow, {
x: -30
}, {
duration: 3000,
easing: tween.easeInOut,
onFinish: function onFinish() {
tween(titleGlow, {
x: 0
}, {
duration: 3000,
easing: tween.easeInOut,
onFinish: _titleGlowMoveAnim
});
}
});
}
});
};
LK.setTimeout(_titleGlowMoveAnim, 1000);
};
self.hide = function (callback) {
tween(self, {
alpha: 0,
scaleX: 0.8,
scaleY: 0.8
}, {
duration: 500,
easing: tween.easeIn,
onFinish: function onFinish() {
self.destroy();
if (callback) callback();
}
});
};
// Language toggle button
var langButton = new Text2(getText('language'), {
size: 40,
fill: 0x74b9ff
});
langButton.anchor.set(1, 0);
langButton.x = 280;
langButton.y = -450;
self.addChild(langButton);
// Touch handling - tap anywhere to start game
self.down = function (x, y, obj) {
// Check if language button was tapped
var localPos = self.toLocal({
x: x,
y: y
});
var buttonBounds = {
x1: langButton.x - 60,
y1: langButton.y - 20,
x2: langButton.x + 20,
y2: langButton.y + 20
};
if (localPos.x >= buttonBounds.x1 && localPos.x <= buttonBounds.x2 && localPos.y >= buttonBounds.y1 && localPos.y <= buttonBounds.y2) {
// Toggle language
toggleLanguage();
// Update all text elements
titleText.setText(getText('title'));
titleGlow.setText(getText('title'));
instructText.setText(getText('instructions'));
langButton.setText(getText('language'));
return;
}
self.hide(function () {
startGame(1);
});
};
return self;
});
var StreakDisplay = Container.expand(function () {
var self = Container.call(this);
var bg = self.attachAsset('streakBg', {
anchorX: 0.5,
anchorY: 0.5
});
var streakText = new Text2(getText('streak') + '0', {
size: 30,
fill: 0x000000
});
streakText.anchor.set(0.5, 0.5);
self.addChild(streakText);
self.currentStreak = 0;
self.updateStreak = function (streak) {
self.currentStreak = streak;
streakText.setText(getText('streak') + streak);
if (streak > 0) {
// Enhanced streak animation with scale and multiple color flashes
tween(self, {
scaleX: 1.3,
scaleY: 1.3
}, {
duration: 150,
easing: tween.easeOut,
onFinish: function onFinish() {
tween(self, {
scaleX: 1.8,
scaleY: 1.8
}, {
duration: 200,
easing: tween.bounceOut
});
}
});
// Multi-stage color flash
tween(bg, {
tint: 0xffffff
}, {
duration: 100,
easing: tween.easeOut,
onFinish: function onFinish() {
tween(bg, {
tint: 0x00ff88
}, {
duration: 150,
easing: tween.easeOut,
onFinish: function onFinish() {
tween(bg, {
tint: 0xffd700
}, {
duration: 200,
easing: tween.easeOut,
onFinish: function onFinish() {
tween(bg, {
tint: 0xfd79a8
}, {
duration: 300,
easing: tween.easeIn
});
}
});
}
});
}
});
// Text glow effect
tween(streakText, {
tint: 0xffffff
}, {
duration: 200,
easing: tween.easeOut,
onFinish: function onFinish() {
tween(streakText, {
tint: 0x000000
}, {
duration: 400,
easing: tween.easeIn
});
}
});
}
};
return self;
});
var TargetPattern = Container.expand(function () {
var self = Container.call(this);
var bg = self.attachAsset('targetPattern', {
anchorX: 0.5,
anchorY: 0.5
});
var patternText = new Text2(getText('target') + '50-60', {
size: 40,
fill: 0xFFFFFF
});
patternText.anchor.set(0.5, 0.5);
self.addChild(patternText);
self.targetMin = 50;
self.targetMax = 60;
self.points = 10;
self.generatePattern = function (difficulty) {
// Slide out animation
tween(self, {
scaleX: 0.8,
scaleY: 0.8,
alpha: 0.5
}, {
duration: 150,
easing: tween.easeIn,
onFinish: function onFinish() {
var patternType = Math.floor(Math.random() * 3);
if (patternType === 0) {
// Range pattern
var center = Math.floor(Math.random() * 80) + 10;
var range = Math.max(5, 20 - difficulty * 2);
self.targetMin = center - Math.floor(range / 2);
self.targetMax = center + Math.floor(range / 2);
patternText.setText(getText('target') + self.targetMin + '-' + self.targetMax);
self.points = 10 + difficulty * 2;
} else if (patternType === 1) {
// Even/Odd pattern
var isEven = Math.random() < 0.5;
self.targetMin = isEven ? 2 : 1;
self.targetMax = isEven ? 100 : 99;
patternText.setText(isEven ? getText('targetEven') : getText('targetOdd'));
self.points = 5 + difficulty;
} else {
// Divisible pattern
var divisor = [3, 5, 7, 11][Math.floor(Math.random() * 4)];
self.targetMin = divisor;
self.targetMax = divisor;
patternText.setText(getText('targetDivisible') + divisor);
self.points = 15 + difficulty * 3;
}
// Slide in animation
tween(self, {
scaleX: 1.0,
scaleY: 1.0,
alpha: 1.0
}, {
duration: 300,
easing: tween.bounceOut
});
}
});
};
self.checkMatch = function (number) {
if (self.targetMin === self.targetMax) {
// Divisible pattern
return number % self.targetMin === 0;
} else if (self.targetMin === 1 || self.targetMin === 2) {
// Even/Odd pattern
return number % 2 === 0 && self.targetMin === 2 || number % 2 === 1 && self.targetMin === 1;
} else {
// Range pattern
return number >= self.targetMin && number <= self.targetMax;
}
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x2d3436,
width: 2048,
height: 2732
});
/****
* Game Code
****/
// Language system
var currentLanguage = 'en'; // Default to English
var texts = {
tr: {
title: 'ŞANSLI SAYILAR\nYARIŞI',
instructions: 'Hedef kalıpları eşleştir\nPuan ve seri kazan\nZamanı yen!\n\nBAŞLAMAK İÇİN DOKUN',
tapToGenerate: 'SAYI ÜRETMEK İÇİN DOKUN!',
streak: 'Seri: ',
level: 'Seviye ',
target: 'Hedef: ',
targetEven: 'Hedef: ÇİFT',
targetOdd: 'Hedef: TEK',
targetDivisible: 'Hedef: ÷',
language: 'EN'
},
en: {
title: 'LUCKY NUMBERS\nRUSH',
instructions: 'Match target patterns\nEarn points and streaks\nBeat the clock!\n\nTAP ANYWHERE TO START',
tapToGenerate: 'TAP TO GENERATE NUMBERS!',
streak: 'Streak: ',
level: 'Level ',
target: 'Target: ',
targetEven: 'Target: EVEN',
targetOdd: 'Target: ODD',
targetDivisible: 'Target: ÷',
language: 'TR'
}
};
function getText(key) {
return texts[currentLanguage][key] || texts.en[key] || key;
}
function toggleLanguage() {
currentLanguage = currentLanguage === 'tr' ? 'en' : 'tr';
}
// Game state variables
var gameTime = 60000; // 60 seconds
var timeRemaining = gameTime;
var difficulty = 1;
var selectedGameDifficulty = 1;
var currentStreak = 0;
var multiplier = 1;
var gameActive = false; // Start with menu
var shakeIntensity = 0;
var shakeDecay = 0.9;
var lastRngTime = 0;
var rngCooldown = 500; // 0.5 second cooldown in milliseconds
var gameState = 'menu'; // 'menu' or 'playing'
// Particle system
var particleSystem = game.addChild(new ParticleSystem());
// KEMALDEV title display
var kemaldevTitle = new Text2('KEMALDEV', {
size: 120,
fill: 0xFFD700,
stroke: 0x2d3436,
strokeThickness: 8
});
kemaldevTitle.anchor.set(0.5, 0.5);
kemaldevTitle.x = 1024;
kemaldevTitle.y = 1366;
kemaldevTitle.alpha = 0;
game.addChild(kemaldevTitle);
// KEMALDEV logo
var kemaldevLogo = game.attachAsset('kemaldevLogo', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
y: 1366 - 300,
alpha: 0,
scaleX: 1.2,
scaleY: 1.2
});
// Show KEMALDEV title first
tween(kemaldevTitle, {
alpha: 1,
scaleX: 1.2,
scaleY: 1.2
}, {
duration: 1000,
easing: tween.bounceOut,
onFinish: function onFinish() {
// Hold for 2 seconds then fade out and show menu
LK.setTimeout(function () {
tween(kemaldevTitle, {
alpha: 0,
scaleX: 0.8,
scaleY: 0.8
}, {
duration: 500,
easing: tween.easeIn,
onFinish: function onFinish() {
kemaldevTitle.destroy();
kemaldevLogo.destroy();
// Now show the start menu
var startMenu = game.addChild(new StartMenu());
startMenu.x = 1024;
startMenu.y = 1366;
startMenu.show();
}
});
// Fade out logo simultaneously
tween(kemaldevLogo, {
alpha: 0,
scaleX: 0.8,
scaleY: 0.8
}, {
duration: 500,
easing: tween.easeIn
});
}, 2000);
}
});
// Show KEMALDEV logo with synchronized animation
tween(kemaldevLogo, {
alpha: 1,
scaleX: 1.4,
scaleY: 1.4,
rotation: Math.PI * 2
}, {
duration: 1000,
easing: tween.bounceOut
});
// Add spinning animation to logo during display
var _logoSpinAnimation = function logoSpinAnimation() {
tween(kemaldevLogo, {
rotation: kemaldevLogo.rotation + Math.PI * 2
}, {
duration: 2000,
easing: tween.easeInOut,
onFinish: _logoSpinAnimation
});
};
LK.setTimeout(_logoSpinAnimation, 1200);
// Start game function
function startGame(difficultyLevel) {
gameState = 'playing';
gameActive = true;
selectedGameDifficulty = difficultyLevel;
difficulty = difficultyLevel;
// Adjust game parameters based on difficulty
if (difficultyLevel === 1) {
// Easy: More time, slower progression
gameTime = 90000; // 90 seconds
rngCooldown = 300; // Faster RNG
} else if (difficultyLevel === 2) {
// Medium: Normal settings
gameTime = 60000; // 60 seconds
rngCooldown = 500; // Normal RNG
} else {
// Impossible: Less time, faster progression, longer cooldown
gameTime = 45000; // 45 seconds
rngCooldown = 800; // Slower RNG
}
timeRemaining = gameTime;
// Start background music
LK.playMusic('backgroundMusic');
// Start timers
startGameTimers();
// Show game elements with animations
// Fade in tap area
tween(tapArea, {
alpha: 0.1
}, {
duration: 1000,
easing: tween.easeIn
});
// Add subtle color cycling to tap area
var _cycleTapAreaColor = function cycleTapAreaColor() {
tween(tapArea, {
tint: 0x3d4852
}, {
duration: 3000,
easing: tween.easeInOut,
onFinish: function onFinish() {
tween(tapArea, {
tint: 0x2d3436
}, {
duration: 3000,
easing: tween.easeInOut,
onFinish: _cycleTapAreaColor
});
}
});
};
LK.setTimeout(_cycleTapAreaColor, 2000);
// Animate number display entrance
LK.setTimeout(function () {
tween(numberDisplay, {
alpha: 1,
scaleX: 1,
scaleY: 1
}, {
duration: 800,
easing: tween.bounceOut
});
}, 600);
// Animate AI competitor entrance
LK.setTimeout(function () {
tween(aiCompetitor, {
alpha: 1,
scaleX: 0.8,
scaleY: 0.8
}, {
duration: 800,
easing: tween.bounceOut
});
}, 700);
// Animate separator line entrance
LK.setTimeout(function () {
tween(separatorLine, {
alpha: 0.6,
scaleX: 6.0,
scaleY: 0.2
}, {
duration: 600,
easing: tween.easeOut
});
}, 750);
// Animate old floor entrance
LK.setTimeout(function () {
tween(oldFloor, {
alpha: 0.8
}, {
duration: 1000,
easing: tween.easeOut
});
}, 400);
// Animate floor cracks entrance
LK.setTimeout(function () {
tween(floorCrack1, {
alpha: 0.7
}, {
duration: 800,
easing: tween.easeOut
});
tween(floorCrack2, {
alpha: 0.6
}, {
duration: 900,
easing: tween.easeOut
});
tween(floorCrack3, {
alpha: 0.5
}, {
duration: 700,
easing: tween.easeOut
});
}, 600);
// Animate floor wear marks entrance
LK.setTimeout(function () {
tween(floorWear1, {
alpha: 0.4
}, {
duration: 600,
easing: tween.easeOut
});
tween(floorWear2, {
alpha: 0.3
}, {
duration: 700,
easing: tween.easeOut
});
tween(floorWear3, {
alpha: 0.5
}, {
duration: 800,
easing: tween.easeOut
});
}, 800);
// Animate dirt stains entrance
LK.setTimeout(function () {
tween(floorDirt1, {
alpha: 0.6
}, {
duration: 500,
easing: tween.easeOut
});
tween(floorDirt2, {
alpha: 0.4
}, {
duration: 600,
easing: tween.easeOut
});
tween(floorDirt3, {
alpha: 0.5
}, {
duration: 700,
easing: tween.easeOut
});
tween(floorDirt4, {
alpha: 0.3
}, {
duration: 550,
easing: tween.easeOut
});
}, 1000);
// Set AI difficulty
aiCompetitor.setDifficulty(difficultyLevel);
// Animate target pattern entrance
LK.setTimeout(function () {
tween(targetPattern, {
alpha: 1,
y: 450
}, {
duration: 600,
easing: tween.easeOut
});
}, 800);
// Animate streak display entrance
LK.setTimeout(function () {
tween(streakDisplay, {
alpha: 1,
y: 2200
}, {
duration: 500,
easing: tween.easeOut
});
}, 1000);
// Initialize first pattern after animations
LK.setTimeout(function () {
targetPattern.generatePattern(difficulty);
}, 1200);
// Show and animate instructions
LK.setTimeout(function () {
tween(instructionText, {
alpha: 1,
y: 600
}, {
duration: 800,
easing: tween.bounceOut
});
// Floating animation
var _floatInstructions = function floatInstructions() {
tween(instructionText, {
y: 650
}, {
duration: 2000,
easing: tween.easeInOut,
onFinish: function onFinish() {
tween(instructionText, {
y: 600
}, {
duration: 2000,
easing: tween.easeInOut,
onFinish: _floatInstructions
});
}
});
};
_floatInstructions();
// Fade out instructions after 3 seconds
LK.setTimeout(function () {
tween(instructionText, {
alpha: 0,
y: 550
}, {
duration: 1000,
easing: tween.easeIn
});
}, 3000);
}, 200);
// Slow left-right movement for instruction text
var _instructMoveAnim = function instructMoveAnim() {
tween(instructionText, {
x: 40
}, {
duration: 4000,
easing: tween.easeInOut,
onFinish: function onFinish() {
tween(instructionText, {
x: -40
}, {
duration: 4000,
easing: tween.easeInOut,
onFinish: function onFinish() {
tween(instructionText, {
x: 0
}, {
duration: 4000,
easing: tween.easeInOut,
onFinish: _instructMoveAnim
});
}
});
}
});
};
LK.setTimeout(_instructMoveAnim, 1500);
// Show UI elements with animations
LK.setTimeout(function () {
tween(scoreTxt, {
alpha: 1,
scaleX: 1,
scaleY: 1
}, {
duration: 600,
easing: tween.bounceOut
});
// Animate AI score display
tween(aiScoreTxt, {
alpha: 1,
scaleX: 1,
scaleY: 1
}, {
duration: 600,
easing: tween.bounceOut
});
}, 300);
LK.setTimeout(function () {
tween(timeTxt, {
alpha: 1,
scaleX: 1,
scaleY: 1
}, {
duration: 500,
easing: tween.bounceOut
});
}, 200);
LK.setTimeout(function () {
tween(difficultyTxt, {
alpha: 1,
x: 20
}, {
duration: 700,
easing: tween.easeOut
});
// Add pulsing glow to difficulty text
var _pulseDifficulty = function pulseDifficulty() {
tween(difficultyTxt, {
scaleX: 1.1,
scaleY: 1.1
}, {
duration: 1500,
easing: tween.easeInOut,
onFinish: function onFinish() {
tween(difficultyTxt, {
scaleX: 1.0,
scaleY: 1.0
}, {
duration: 1500,
easing: tween.easeInOut,
onFinish: _pulseDifficulty
});
}
});
};
LK.setTimeout(_pulseDifficulty, 1000);
}, 400);
// Show multiplier display
LK.setTimeout(function () {
tween(multiplierTxt, {
alpha: 1,
y: 0
}, {
duration: 500,
easing: tween.bounceOut
});
}, 1200);
}
function startGameTimers() {
// Game timer
gameTimer = LK.setInterval(function () {
if (!gameActive) return;
timeRemaining -= 100;
var seconds = Math.ceil(timeRemaining / 1000);
timeTxt.setText(seconds.toString());
// Dynamic background color based on time remaining
if (timeRemaining < 10000) {
// Gradually shift to dramatic purple-red as time runs out
var urgency = 1 - timeRemaining / 10000;
var red = Math.floor(45 + urgency * 80);
var green = Math.floor(35 * (1 - urgency));
var blue = Math.floor(54 + urgency * 40);
game.setBackgroundColor(red << 16 | green << 8 | blue);
} else if (currentStreak > 5) {
// Beautiful teal-gold background for high streaks
game.setBackgroundColor(0x00b894);
} else {
// Enhanced default background with warmer tones
game.setBackgroundColor(0x2d3436);
}
if (timeRemaining <= 0) {
gameActive = false;
LK.clearInterval(gameTimer);
LK.clearInterval(difficultyTimer);
// Compare player score vs AI score
var playerScore = LK.getScore();
var aiScore = aiCompetitor ? aiCompetitor.aiScore : 0;
if (playerScore > aiScore && playerScore >= 300) {
LK.showYouWin(); // Player beat AI and got good score
} else if (playerScore > aiScore) {
LK.showGameOver(); // Player beat AI but low score
} else {
LK.showGameOver(); // AI won or tied
}
}
}, 100);
// Difficulty progression
difficultyTimer = LK.setInterval(function () {
if (!gameActive) return;
var baseDifficulty = selectedGameDifficulty;
var timeFactor = Math.floor((gameTime - timeRemaining) / 10000);
difficulty = Math.min(10, baseDifficulty + timeFactor);
difficultyTxt.setText(getText('level') + difficulty);
// Generate new pattern every 5 seconds
if ((gameTime - timeRemaining) % 5000 < 100) {
targetPattern.generatePattern(difficulty);
}
}, 100);
}
// UI Elements (initially hidden)
var scoreTxt = new Text2('PLAYER: 0', {
size: 38,
fill: 0xfdcb6e,
stroke: 0x2d3436,
strokeThickness: 4
});
scoreTxt.anchor.set(0.5, 0);
scoreTxt.x = 0;
scoreTxt.y = 80;
scoreTxt.alpha = 0;
scoreTxt.scaleX = 0;
scoreTxt.scaleY = 0;
LK.gui.top.addChild(scoreTxt);
// AI Score display
var aiScoreTxt = new Text2('AI: 0', {
size: 38,
fill: 0xff6b6b,
stroke: 0x2d3436,
strokeThickness: 4
});
aiScoreTxt.anchor.set(0.5, 0);
aiScoreTxt.x = 0;
aiScoreTxt.y = 130;
aiScoreTxt.alpha = 0;
aiScoreTxt.scaleX = 0;
aiScoreTxt.scaleY = 0;
LK.gui.top.addChild(aiScoreTxt);
var timeTxt = new Text2('60', {
size: 52,
fill: 0xfd79a8,
stroke: 0x2d3436,
strokeThickness: 4
});
timeTxt.anchor.set(1, 0);
timeTxt.x = -20;
timeTxt.y = 20;
timeTxt.alpha = 0;
timeTxt.scaleX = 0;
timeTxt.scaleY = 0;
LK.gui.topRight.addChild(timeTxt);
var difficultyTxt = new Text2(getText('level') + '1', {
size: 42,
fill: 0x74b9ff,
stroke: 0x2d3436,
strokeThickness: 3
});
difficultyTxt.anchor.set(0, 0);
difficultyTxt.x = -100;
difficultyTxt.y = 120;
difficultyTxt.alpha = 0;
LK.gui.topLeft.addChild(difficultyTxt);
// Game objects - initially hidden
var tapArea = game.attachAsset('tapArea', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
y: 1366,
alpha: 0
});
// Old floor at bottom of screen
var oldFloor = game.attachAsset('oldFloor', {
anchorX: 0.5,
anchorY: 1,
x: 1024,
y: 2732,
alpha: 0
});
// Floor cracks for aged appearance
var floorCrack1 = game.attachAsset('floorCrack', {
anchorX: 0.5,
anchorY: 0.5,
x: 400,
y: 2600,
alpha: 0,
rotation: 0.3
});
var floorCrack2 = game.attachAsset('floorCrack', {
anchorX: 0.5,
anchorY: 0.5,
x: 1200,
y: 2650,
alpha: 0,
rotation: -0.2
});
var floorCrack3 = game.attachAsset('floorCrack', {
anchorX: 0.5,
anchorY: 0.5,
x: 800,
y: 2680,
alpha: 0,
rotation: 0.1
});
// Wear marks on floor
var floorWear1 = game.attachAsset('floorWear', {
anchorX: 0.5,
anchorY: 0.5,
x: 300,
y: 2620,
alpha: 0
});
var floorWear2 = game.attachAsset('floorWear', {
anchorX: 0.5,
anchorY: 0.5,
x: 1400,
y: 2630,
alpha: 0,
scaleX: 0.7,
scaleY: 0.7
});
var floorWear3 = game.attachAsset('floorWear', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
y: 2640,
alpha: 0,
scaleX: 1.2,
scaleY: 0.8
});
// Dirt stains
var floorDirt1 = game.attachAsset('floorDirt', {
anchorX: 0.5,
anchorY: 0.5,
x: 200,
y: 2580,
alpha: 0
});
var floorDirt2 = game.attachAsset('floorDirt', {
anchorX: 0.5,
anchorY: 0.5,
x: 600,
y: 2620,
alpha: 0,
scaleX: 0.6,
scaleY: 0.6
});
var floorDirt3 = game.attachAsset('floorDirt', {
anchorX: 0.5,
anchorY: 0.5,
x: 1500,
y: 2590,
alpha: 0
});
var floorDirt4 = game.attachAsset('floorDirt', {
anchorX: 0.5,
anchorY: 0.5,
x: 900,
y: 2570,
alpha: 0,
scaleX: 0.8,
scaleY: 0.8
});
var numberDisplay = game.addChild(new NumberDisplay());
numberDisplay.x = 1024;
numberDisplay.y = 800;
numberDisplay.alpha = 0;
numberDisplay.scaleX = 2.5;
numberDisplay.scaleY = 2.5;
// AI Competitor - positioned lower down
var aiCompetitor = game.addChild(new AICompetitor());
aiCompetitor.x = 1024;
aiCompetitor.y = 1900;
aiCompetitor.alpha = 0;
aiCompetitor.scaleX = 2.5;
aiCompetitor.scaleY = 2.5;
// Add visual line separator between player and AI
var separatorLine = game.attachAsset('targetPattern', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
y: 1350,
alpha: 0,
scaleX: 6.0,
scaleY: 0.2
});
separatorLine.tint = 0x74b9ff;
// Add breathing animation to separator line
var _breatheSeparator = function breatheSeparator() {
tween(separatorLine, {
scaleX: 6.5,
alpha: 0.8
}, {
duration: 1800,
easing: tween.easeInOut,
onFinish: function onFinish() {
tween(separatorLine, {
scaleX: 6.0,
alpha: 0.6
}, {
duration: 1800,
easing: tween.easeInOut,
onFinish: _breatheSeparator
});
}
});
};
LK.setTimeout(_breatheSeparator, 2000);
var targetPattern = game.addChild(new TargetPattern());
targetPattern.x = 1024;
targetPattern.y = 450;
targetPattern.alpha = 0;
targetPattern.scaleX = 2.0;
targetPattern.scaleY = 2.0;
// Add continuous floating animation to target pattern
var _floatTargetPattern = function floatTargetPattern() {
tween(targetPattern, {
y: 470,
rotation: 0.05
}, {
duration: 2500,
easing: tween.easeInOut,
onFinish: function onFinish() {
tween(targetPattern, {
y: 430,
rotation: -0.05
}, {
duration: 2500,
easing: tween.easeInOut,
onFinish: _floatTargetPattern
});
}
});
};
LK.setTimeout(_floatTargetPattern, 1500);
var streakDisplay = game.addChild(new StreakDisplay());
streakDisplay.x = 1024;
streakDisplay.y = 2200;
streakDisplay.alpha = 0;
streakDisplay.scaleX = 1.8;
streakDisplay.scaleY = 1.8;
// Instructions
var instructionText = new Text2(getText('tapToGenerate'), {
size: 72,
fill: 0xa29bfe,
stroke: 0x2d3436,
strokeThickness: 4
});
instructionText.anchor.set(0.5, 0.5);
instructionText.x = 1024;
instructionText.y = 600;
instructionText.alpha = 0;
game.addChild(instructionText);
// Timer variables
var gameTimer;
var difficultyTimer;
// Touch handling
game.down = function (x, y, obj) {
if (!gameActive || gameState !== 'playing') return;
// Check cooldown
var currentTime = Date.now();
if (currentTime - lastRngTime < rngCooldown) {
return; // Still in cooldown, ignore tap
}
lastRngTime = currentTime;
numberDisplay.generateNumber();
LK.getSound('numberGenerate').play();
// Check for match
if (targetPattern.checkMatch(numberDisplay.currentNumber)) {
// Match found!
currentStreak++;
multiplier = Math.min(5, 1 + Math.floor(currentStreak / 3));
var points = targetPattern.points * multiplier;
LK.setScore(LK.getScore() + points);
// Screen shake for big matches
if (multiplier > 2) {
shakeIntensity = Math.min(15, multiplier * 3);
}
// Particle burst for matches
var particleColor = multiplier > 3 ? 0xFFD700 : 0x00FF00;
var particleCount = Math.min(20, 5 + multiplier * 2);
particleSystem.burst(numberDisplay.x, numberDisplay.y, particleColor, particleCount);
// Update score text
scoreTxt.setText('PLAYER: ' + LK.getScore().toString());
// Score animation
tween(scoreTxt, {
scaleX: 1.3,
scaleY: 1.3
}, {
duration: 200,
easing: tween.easeOut,
onFinish: function onFinish() {
tween(scoreTxt, {
scaleX: 1,
scaleY: 1
}, {
duration: 300,
easing: tween.bounceOut
});
}
});
// Enhanced number display celebration
tween(numberDisplay, {
rotation: Math.PI * 2
}, {
duration: 600,
easing: tween.easeOut
});
streakDisplay.updateStreak(currentStreak);
// Visual feedback
LK.effects.flashObject(targetPattern, 0x00ff00, 500);
if (currentStreak > 1) {
LK.getSound('streak').play();
// Extra particles for streak
particleSystem.burst(streakDisplay.x, streakDisplay.y, 0xFFD700, 8);
} else {
LK.getSound('match').play();
}
// Generate new pattern
targetPattern.generatePattern(difficulty);
} else {
// No match, reset streak
if (currentStreak > 0) {
currentStreak = 0;
multiplier = 1;
streakDisplay.updateStreak(currentStreak);
// Flash red for missed match
LK.effects.flashObject(numberDisplay, 0xff0000, 300);
// Red particles for miss
particleSystem.burst(numberDisplay.x, numberDisplay.y, 0xFF0000, 5);
}
}
};
// Multiplier display
var multiplierTxt = new Text2('x1', {
size: 45,
fill: 0xfd79a8,
stroke: 0x2d3436,
strokeThickness: 4
});
multiplierTxt.anchor.set(0.5, 1);
multiplierTxt.alpha = 0;
multiplierTxt.y = 50;
LK.gui.bottom.addChild(multiplierTxt);
game.update = function () {
if (!gameActive) return;
// Screen shake effect
if (shakeIntensity > 0) {
game.x = (Math.random() - 0.5) * shakeIntensity;
game.y = (Math.random() - 0.5) * shakeIntensity;
shakeIntensity *= shakeDecay;
if (shakeIntensity < 0.5) {
shakeIntensity = 0;
game.x = 0;
game.y = 0;
}
}
// Update multiplier display
multiplierTxt.setText('x' + multiplier);
// Enhanced pulse multiplier when active
if (multiplier > 1) {
var pulse = Math.sin(LK.ticks * 0.15) * 0.15 + 1;
multiplierTxt.scaleX = pulse;
multiplierTxt.scaleY = pulse;
// Color shift for high multipliers
if (multiplier > 3) {
var colorShift = Math.sin(LK.ticks * 0.1) * 0.5 + 0.5;
multiplierTxt.tint = 0xFFFFFF * colorShift + 0xFF0000 * (1 - colorShift);
}
} else {
multiplierTxt.scaleX = 1;
multiplierTxt.scaleY = 1;
multiplierTxt.tint = 0xFFD700;
}
// AI Competitor logic
if (gameActive && gameState === 'playing' && aiCompetitor) {
// Update AI difficulty based on current game difficulty
aiCompetitor.setDifficulty(difficulty);
// AI attempts to match patterns
aiCompetitor.attemptMatch(targetPattern);
// Update AI score display
aiScoreTxt.setText('AI: ' + aiCompetitor.aiScore);
// AI score animation when it scores
if (aiCompetitor.aiScore > 0) {
var aiPulse = Math.sin(LK.ticks * 0.1) * 0.1 + 1;
aiScoreTxt.scaleX = aiPulse;
aiScoreTxt.scaleY = aiPulse;
}
// Competitive visual feedback with enhanced animations
if (aiCompetitor.aiScore > LK.getScore()) {
// AI is winning - make AI score more prominent
var aiWinGlow = Math.sin(LK.ticks * 0.15) * 0.3 + 0.7;
aiScoreTxt.tint = 0xffffff;
aiScoreTxt.alpha = aiWinGlow + 0.3;
scoreTxt.tint = 0x888888;
scoreTxt.alpha = 0.7;
// Add subtle shake to player score when losing
if (LK.ticks % 120 === 0) {
tween(scoreTxt, {
x: scoreTxt.x + 5
}, {
duration: 100,
easing: tween.easeOut,
onFinish: function onFinish() {
tween(scoreTxt, {
x: 0
}, {
duration: 100,
easing: tween.easeOut
});
}
});
}
} else if (LK.getScore() > aiCompetitor.aiScore) {
// Player is winning
var playerWinGlow = Math.sin(LK.ticks * 0.12) * 0.2 + 0.8;
scoreTxt.tint = 0xffffff;
scoreTxt.alpha = playerWinGlow + 0.2;
aiScoreTxt.tint = 0x888888;
aiScoreTxt.alpha = 0.7;
} else {
// Tie - both pulsing
var tieGlow = Math.sin(LK.ticks * 0.1) * 0.2 + 0.8;
scoreTxt.tint = 0xfdcb6e;
scoreTxt.alpha = tieGlow;
aiScoreTxt.tint = 0xff6b6b;
aiScoreTxt.alpha = tieGlow;
}
}
// Enhanced time warning effect
if (timeRemaining < 10000) {
var flash = Math.sin(LK.ticks * 0.3) * 0.3 + 0.7;
timeTxt.alpha = flash;
// Add color shift for urgency
var urgencyColor = Math.sin(LK.ticks * 0.25) * 0.5 + 0.5;
timeTxt.tint = 0xfd79a8 * (1 - urgencyColor) + 0xff0000 * urgencyColor;
// Pulse timer when very low
if (timeRemaining < 5000) {
var urgentPulse = Math.sin(LK.ticks * 0.2) * 0.2 + 1;
timeTxt.scaleX = urgentPulse;
timeTxt.scaleY = urgentPulse;
// Add screen edge glow effect
if (LK.ticks % 60 === 0) {
tween(game, {
tint: 0xff6666
}, {
duration: 200,
easing: tween.easeOut,
onFinish: function onFinish() {
tween(game, {
tint: 0xffffff
}, {
duration: 300,
easing: tween.easeIn
});
}
});
}
}
}
// Subtle floating animation for number display
numberDisplay.y = 800 + Math.sin(LK.ticks * 0.05) * 20;
// AI floating animation
if (aiCompetitor) {
aiCompetitor.y = 1900 + Math.sin(LK.ticks * 0.03 + 1) * 18;
}
// Subtle aging effects for floor
if (oldFloor && oldFloor.alpha > 0) {
// Slight color variation to simulate age
var ageEffect = Math.sin(LK.ticks * 0.01) * 0.05 + 0.95;
oldFloor.tint = 0x4a4037 * ageEffect + 0x3d342a * (1 - ageEffect);
// Very subtle breathing effect for wear marks
if (floorWear1) {
floorWear1.alpha = 0.4 + Math.sin(LK.ticks * 0.008) * 0.1;
floorWear2.alpha = 0.3 + Math.sin(LK.ticks * 0.006 + 1) * 0.08;
floorWear3.alpha = 0.5 + Math.sin(LK.ticks * 0.007 + 2) * 0.12;
}
}
// Rainbow effect for high scores removed
}; ===================================================================
--- original.js
+++ change.js
@@ -876,8 +876,86 @@
duration: 600,
easing: tween.easeOut
});
}, 750);
+ // Animate old floor entrance
+ LK.setTimeout(function () {
+ tween(oldFloor, {
+ alpha: 0.8
+ }, {
+ duration: 1000,
+ easing: tween.easeOut
+ });
+ }, 400);
+ // Animate floor cracks entrance
+ LK.setTimeout(function () {
+ tween(floorCrack1, {
+ alpha: 0.7
+ }, {
+ duration: 800,
+ easing: tween.easeOut
+ });
+ tween(floorCrack2, {
+ alpha: 0.6
+ }, {
+ duration: 900,
+ easing: tween.easeOut
+ });
+ tween(floorCrack3, {
+ alpha: 0.5
+ }, {
+ duration: 700,
+ easing: tween.easeOut
+ });
+ }, 600);
+ // Animate floor wear marks entrance
+ LK.setTimeout(function () {
+ tween(floorWear1, {
+ alpha: 0.4
+ }, {
+ duration: 600,
+ easing: tween.easeOut
+ });
+ tween(floorWear2, {
+ alpha: 0.3
+ }, {
+ duration: 700,
+ easing: tween.easeOut
+ });
+ tween(floorWear3, {
+ alpha: 0.5
+ }, {
+ duration: 800,
+ easing: tween.easeOut
+ });
+ }, 800);
+ // Animate dirt stains entrance
+ LK.setTimeout(function () {
+ tween(floorDirt1, {
+ alpha: 0.6
+ }, {
+ duration: 500,
+ easing: tween.easeOut
+ });
+ tween(floorDirt2, {
+ alpha: 0.4
+ }, {
+ duration: 600,
+ easing: tween.easeOut
+ });
+ tween(floorDirt3, {
+ alpha: 0.5
+ }, {
+ duration: 700,
+ easing: tween.easeOut
+ });
+ tween(floorDirt4, {
+ alpha: 0.3
+ }, {
+ duration: 550,
+ easing: tween.easeOut
+ });
+ }, 1000);
// Set AI difficulty
aiCompetitor.setDifficulty(difficultyLevel);
// Animate target pattern entrance
LK.setTimeout(function () {
@@ -1150,8 +1228,100 @@
x: 1024,
y: 1366,
alpha: 0
});
+// Old floor at bottom of screen
+var oldFloor = game.attachAsset('oldFloor', {
+ anchorX: 0.5,
+ anchorY: 1,
+ x: 1024,
+ y: 2732,
+ alpha: 0
+});
+// Floor cracks for aged appearance
+var floorCrack1 = game.attachAsset('floorCrack', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ x: 400,
+ y: 2600,
+ alpha: 0,
+ rotation: 0.3
+});
+var floorCrack2 = game.attachAsset('floorCrack', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ x: 1200,
+ y: 2650,
+ alpha: 0,
+ rotation: -0.2
+});
+var floorCrack3 = game.attachAsset('floorCrack', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ x: 800,
+ y: 2680,
+ alpha: 0,
+ rotation: 0.1
+});
+// Wear marks on floor
+var floorWear1 = game.attachAsset('floorWear', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ x: 300,
+ y: 2620,
+ alpha: 0
+});
+var floorWear2 = game.attachAsset('floorWear', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ x: 1400,
+ y: 2630,
+ alpha: 0,
+ scaleX: 0.7,
+ scaleY: 0.7
+});
+var floorWear3 = game.attachAsset('floorWear', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ x: 1024,
+ y: 2640,
+ alpha: 0,
+ scaleX: 1.2,
+ scaleY: 0.8
+});
+// Dirt stains
+var floorDirt1 = game.attachAsset('floorDirt', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ x: 200,
+ y: 2580,
+ alpha: 0
+});
+var floorDirt2 = game.attachAsset('floorDirt', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ x: 600,
+ y: 2620,
+ alpha: 0,
+ scaleX: 0.6,
+ scaleY: 0.6
+});
+var floorDirt3 = game.attachAsset('floorDirt', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ x: 1500,
+ y: 2590,
+ alpha: 0
+});
+var floorDirt4 = game.attachAsset('floorDirt', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ x: 900,
+ y: 2570,
+ alpha: 0,
+ scaleX: 0.8,
+ scaleY: 0.8
+});
var numberDisplay = game.addChild(new NumberDisplay());
numberDisplay.x = 1024;
numberDisplay.y = 800;
numberDisplay.alpha = 0;
@@ -1453,6 +1623,18 @@
// AI floating animation
if (aiCompetitor) {
aiCompetitor.y = 1900 + Math.sin(LK.ticks * 0.03 + 1) * 18;
}
+ // Subtle aging effects for floor
+ if (oldFloor && oldFloor.alpha > 0) {
+ // Slight color variation to simulate age
+ var ageEffect = Math.sin(LK.ticks * 0.01) * 0.05 + 0.95;
+ oldFloor.tint = 0x4a4037 * ageEffect + 0x3d342a * (1 - ageEffect);
+ // Very subtle breathing effect for wear marks
+ if (floorWear1) {
+ floorWear1.alpha = 0.4 + Math.sin(LK.ticks * 0.008) * 0.1;
+ floorWear2.alpha = 0.3 + Math.sin(LK.ticks * 0.006 + 1) * 0.08;
+ floorWear3.alpha = 0.5 + Math.sin(LK.ticks * 0.007 + 2) * 0.12;
+ }
+ }
// Rainbow effect for high scores removed
};
\ No newline at end of file