User prompt
kuşları biraz daha büyült. Sayılarını azalt ve üstüne çıkılabilsin
User prompt
bulut kısmında bulutların üzerinde, bulutlardan biraz daha hızlı giden martılar yerleştirmeni istiyorum ara ara geçecek ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
save everything please ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
1000 puana ulaştıktan sonra müziği değiştirmek istiyorum
User prompt
zıplama miktarını arttır lütfen
User prompt
"Implement a variable jump mechanic for the player character: When the jump button is tapped quickly, the character performs a short hop. When the jump button is held down longer, the character jumps higher, up to a maximum height. Jump height should scale smoothly based on how long the button is held, similar to the classic Mario-style jumping. Release the jump button mid-air to stop ascending immediately and begin falling. Ensure the mechanic feels responsive and gives players control over jump precision. Adjust gravity and jump force to make both short hops and full jumps feel natural and satisfying."
User prompt
1. bulutların üzerindeyken karakter seke seke gidiyor. 2. bulutların üzerindeyken zıplayamıyorum. 3. bulutların üzerinden düştüğünde karakter yukarıdan geri gelsin sanki aşağıda görünmez bir portal varmış gibi.
User prompt
yes please
User prompt
oyunu denemek için bir buton oluştur sağ üste ona tıklayınca direkt 1000 puanım olsun
User prompt
"After the player reaches 1000 points, transition the environment to a dreamy sky level. Replace the ground with soft, fluffy, glowing clouds floating in mid-air. The player should now jump from cloud to cloud. Each cloud should have a light bounce animation and emit a gentle mist or glow effect. Background becomes a bright sky with gradient colors (from soft blue to pinkish-purple), with distant, slow-moving clouds and warm sunlight rays. Add sparkling particles and occasional light beams moving across the sky. The player character should appear slightly lighter, as if affected by reduced gravity, and leave a soft trail of glowing particles while moving or jumping. Include subtle, looping ambient sound effects like wind whooshes and echoing chimes.
User prompt
oyun 1000 puana ulaştıktan sonra bitmesin. 1000 puana ulaştıktan sonra karakterin hızı artsın ve müzik değişsin istiyorum. arka plan rengi ve efektlerin rengi değişsin istiyorum ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
. Engellere Dinamiklik Kat Bazıları dönen küpler olabilir. Bazıları yukarıdan inip çıkan lazer ışınları olabilir. Engeller vurulduğunda kırılma veya patlama efekti olabilir.
User prompt
dashtan sonra karakterin hızı yavaşlıyor düzeltir misin
User prompt
dashtan sonra yavaşlamasın aynı hızda devam etsin
User prompt
uzun zıplama basılı tutarken gerçekleşsin. Yani şu anda basılı uzun elinmi çekince uzun zıplıyor. basılı tutma ile eş zamanlı uzun zıplasın
User prompt
tek tıklama ile daha kısa basılı tıklama ile daha uzun bir zıplama gerçekleştirsin
User prompt
1. **Main Character**: - The character is a glowing humanoid-shaped runner made of light. - It leaves behind a bright motion trail that pulses with the beat. - The character floats slightly above the ground and reacts to the rhythm with slight bounces or flashes. - Color: Electric blue, but can shift hue based on combo streak or level theme. - Style: Minimalist, clean lines, neon edges, energetic feel. ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
2. **Background Environment**: - Deep black or dark purple backgrounds to enhance contrast. - Animated, abstract shapes in the distance that pulse or oscillate with the music. - Use blurred moving light lines, particles flowing in the background like data streams. - Occasionally, giant holographic musical elements appear faintly in the distance (e.g., waveforms, speakers, frequency bars). - Background should subtly change with intensity of the song (e.g., darker and faster elements during fast sections).
User prompt
3. **Ground and Platforms**: - Semi-transparent glowing platforms with soft edges. - Platforms can appear/disappear or flicker in sync with beat patterns. - Ground is a smooth light path with a reflective shimmer, maybe with a subtle waveform moving through it. - Platforms change color slightly based on beat intensity or player progress. - Motion on the ground should match the scrolling tempo of the music. ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
**Particles and VFX**: - Use light particles that follow the character and explode gently on successful actions. - When player hits a beat perfectly, emit radial burst particles from the player. - When a level starts or ends, trigger a beat-synced particle wave across the screen. - Add ambient dust/glow particles floating in the air for depth. ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
**Camera/Animation Feel**: - Smooth scrolling side camera that zooms slightly in/out with intensity. - Use beat-synced camera shake or zoom for major hits/drops. - Transitions between levels use sound-reactive animation or tunnel effects. ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
karakter yürüyen ayakları, kolları ve kafası olan bir insan olsun. ve sabit hızda yürüyor olsun
User prompt
karakter yer ile bağımlı bir şekilde sabit durduğunda geriye doğru gitmeli
User prompt
slide sesi de ekle
User prompt
*Sound Effects (SFX)**: Produce short, crisp, electronic sound effects suitable for the following actions in a music game: - **Jump Sound**: A light, musical chime with a quick upward pitch glide, synced to rhythm. - **Dash Sound**: A short, fast swoosh with a sparkly electronic accent. - **Slide Sound**: A smooth, lower-pitched whoosh with a soft tail. - **Success Hit Sound**: A bright, satisfying pluck or tone that feels rewarding. - **Failure/Miss Sound**: A muted, distorted bass thud that indicates loss or error without being too harsh. please add this sounds fix the old ones
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var AmbientParticle = Container.expand(function () {
var self = Container.call(this);
var particleGfx = self.attachAsset('particle', {
anchorX: 0.5,
anchorY: 0.5
});
self.velocityX = (Math.random() - 0.5) * 2;
self.velocityY = (Math.random() - 0.5) * 2;
self.life = 180;
self.maxLife = 180;
self.floatPhase = Math.random() * Math.PI * 2;
self.update = function () {
self.floatPhase += 0.02;
self.x += self.velocityX + Math.sin(self.floatPhase) * 0.5;
self.y += self.velocityY + Math.cos(self.floatPhase) * 0.3;
self.life--;
var alpha = Math.min(1, self.life / 60) * Math.min(1, (self.maxLife - self.life) / 60) * 0.4;
particleGfx.alpha = alpha;
particleGfx.scaleX = 0.5;
particleGfx.scaleY = 0.5;
if (self.life <= 0) {
self.shouldDestroy = true;
}
};
return self;
});
var BackgroundShape = Container.expand(function () {
var self = Container.call(this);
var shapeGfx = self.attachAsset('bgShape', {
anchorX: 0.5,
anchorY: 0.5
});
self.pulsePhase = Math.random() * Math.PI * 2;
self.oscillatePhase = Math.random() * Math.PI * 2;
self.floatSpeed = 0.02 + Math.random() * 0.03;
self.pulseSpeed = 0.05 + Math.random() * 0.05;
self.baseScale = 0.5 + Math.random() * 1.0;
self.baseAlpha = 0.1 + Math.random() * 0.2;
self.update = function () {
self.pulsePhase += self.pulseSpeed;
self.oscillatePhase += self.floatSpeed;
// Pulsing with beat
var beatScale = 1 + beatPulse * 0.3;
var pulseScale = 1 + Math.sin(self.pulsePhase) * 0.2;
shapeGfx.scaleX = self.baseScale * beatScale * pulseScale;
shapeGfx.scaleY = self.baseScale * beatScale * pulseScale;
// Oscillating movement
self.x += Math.sin(self.oscillatePhase) * 0.5;
self.y += Math.cos(self.oscillatePhase * 0.7) * 0.3;
// Alpha varies with intensity
shapeGfx.alpha = self.baseAlpha + beatPulse * 0.1;
// Slow drift
self.x -= gameSpeed * 0.2;
};
return self;
});
var BurstParticle = Container.expand(function () {
var self = Container.call(this);
var particleGfx = self.attachAsset('particle', {
anchorX: 0.5,
anchorY: 0.5
});
self.velocityX = 0;
self.velocityY = 0;
self.life = 40;
self.maxLife = 40;
self.initialScale = 1.5;
self.update = function () {
self.x += self.velocityX;
self.y += self.velocityY;
self.velocityX *= 0.95;
self.velocityY *= 0.95;
self.life--;
var alpha = self.life / self.maxLife;
particleGfx.alpha = alpha;
var scale = self.initialScale * alpha;
particleGfx.scaleX = scale;
particleGfx.scaleY = scale;
if (self.life <= 0) {
self.shouldDestroy = true;
}
};
return self;
});
var DataStreamParticle = Container.expand(function () {
var self = Container.call(this);
var streamGfx = self.attachAsset('dataStream', {
anchorX: 0.5,
anchorY: 0.5
});
self.velocityX = -1 - Math.random() * 3;
self.velocityY = (Math.random() - 0.5) * 2;
self.life = 300 + Math.random() * 200;
self.maxLife = self.life;
self.twinklePhase = Math.random() * Math.PI * 2;
self.update = function () {
self.x += self.velocityX;
self.y += self.velocityY;
self.twinklePhase += 0.1;
self.life--;
// Twinkling effect
var twinkle = Math.sin(self.twinklePhase) * 0.3;
var fadeAlpha = Math.min(1, self.life / 60) * Math.min(1, (self.maxLife - self.life) / 60);
streamGfx.alpha = (0.3 + twinkle + beatPulse * 0.2) * fadeAlpha;
streamGfx.scaleX = 0.8 + beatPulse * 0.4;
streamGfx.scaleY = 0.8 + beatPulse * 0.4;
if (self.life <= 0) {
self.shouldDestroy = true;
}
};
return self;
});
var ExplosionPart = Container.expand(function () {
var self = Container.call(this);
var partGfx = self.attachAsset('explosionPart', {
anchorX: 0.5,
anchorY: 0.5
});
self.velocityX = 0;
self.velocityY = 0;
self.rotationSpeed = 0;
self.life = 40;
self.maxLife = 40;
self.gravity = 0.3;
self.update = function () {
self.x += self.velocityX;
self.y += self.velocityY;
self.velocityY += self.gravity;
self.velocityX *= 0.98;
partGfx.rotation += self.rotationSpeed;
self.life--;
var alpha = self.life / self.maxLife;
partGfx.alpha = alpha;
// Color transition from bright orange to dark red
var colorProgress = 1 - alpha;
var red = 255;
var green = Math.floor(170 * (1 - colorProgress));
var blue = 0;
partGfx.tint = red << 16 | green << 8 | blue;
var scale = alpha * (1 + (1 - alpha) * 0.5);
partGfx.scaleX = scale;
partGfx.scaleY = scale;
if (self.life <= 0) {
self.shouldDestroy = true;
}
};
return self;
});
var GroundSegment = Container.expand(function () {
var self = Container.call(this);
var groundGfx = self.attachAsset('ground', {
anchorX: 0,
anchorY: 0
});
var shimmerGfx = self.attachAsset('groundShimmer', {
anchorX: 0,
anchorY: 0
});
shimmerGfx.y = -8;
self.shimmerPhase = Math.random() * Math.PI * 2;
self.wavePhase = Math.random() * Math.PI * 2;
self.beatIntensity = 0;
self.update = function () {
// Reflective shimmer effect
self.shimmerPhase += 0.08;
shimmerGfx.alpha = 0.4 + Math.sin(self.shimmerPhase) * 0.3;
shimmerGfx.scaleX = 1 + Math.sin(self.shimmerPhase * 0.7) * 0.1;
// Waveform moving through ground
self.wavePhase += gameSpeed * 0.02;
var waveOffset = Math.sin(self.wavePhase) * 3;
groundGfx.y = waveOffset;
shimmerGfx.y = -8 + waveOffset;
// Beat-synced effects
self.beatIntensity = beatPulse;
var glowIntensity = 0.7 + self.beatIntensity * 0.3;
groundGfx.alpha = glowIntensity;
// Color changes based on beat
var beatColor = Math.floor(self.beatIntensity * 80);
groundGfx.tint = 0x4488ff + beatColor;
shimmerGfx.tint = 0x88ccff + (beatColor << 4);
// Motion matching scrolling tempo
self.x -= gameSpeed;
};
return self;
});
var HolographicElement = Container.expand(function () {
var self = Container.call(this);
var elementType = Math.floor(Math.random() * 3);
var elementGfx;
if (elementType === 0) {
elementGfx = self.attachAsset('waveform', {
anchorX: 0.5,
anchorY: 0.5
});
} else if (elementType === 1) {
elementGfx = self.attachAsset('speaker', {
anchorX: 0.5,
anchorY: 0.5
});
} else {
elementGfx = self.attachAsset('freqBar', {
anchorX: 0.5,
anchorY: 1
});
}
self.fadePhase = 0;
self.maxFadePhase = 300 + Math.random() * 200;
self.pulsePhase = Math.random() * Math.PI * 2;
self.driftSpeed = -0.5 - Math.random() * 1.5;
self.baseScale = 2 + Math.random() * 3;
self.update = function () {
self.fadePhase++;
self.pulsePhase += 0.03;
self.x += self.driftSpeed;
// Fade in and out effect
var fadeProgress = self.fadePhase / self.maxFadePhase;
var fadeAlpha;
if (fadeProgress < 0.2) {
fadeAlpha = fadeProgress / 0.2;
} else if (fadeProgress > 0.8) {
fadeAlpha = (1 - fadeProgress) / 0.2;
} else {
fadeAlpha = 1;
}
// Very faint holographic appearance
elementGfx.alpha = fadeAlpha * (0.05 + beatPulse * 0.1);
// Pulse with beat
var scale = self.baseScale * (1 + Math.sin(self.pulsePhase) * 0.1 + beatPulse * 0.2);
elementGfx.scaleX = scale;
elementGfx.scaleY = scale;
// Color tinting for holographic effect
elementGfx.tint = 0x4466aa + Math.floor(beatPulse * 50);
if (self.fadePhase >= self.maxFadePhase) {
self.shouldDestroy = true;
}
};
return self;
});
var LaserBeam = Container.expand(function () {
var self = Container.call(this);
// Laser core that moves up and down
var laserCore = self.attachAsset('laserCore', {
anchorX: 0.5,
anchorY: 0.5
});
// Main laser beam
var laserBeam = self.attachAsset('laserBeam', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = -6;
self.verticalSpeed = 3;
self.direction = 1; // 1 for down, -1 for up
self.warningTimer = 60; // Warning phase before activation
self.isActive = false;
self.pulsePhase = 0;
self.coreY = 0;
self.maxTravel = 150;
// Initially hide the beam, show only core
laserBeam.alpha = 0;
laserCore.y = -self.maxTravel;
self.update = function () {
self.x += self.speed;
// Warning phase
if (self.warningTimer > 0) {
self.warningTimer--;
// Blinking warning effect
laserCore.alpha = Math.sin(self.warningTimer * 0.3) * 0.5 + 0.5;
laserCore.tint = 0xff0000; // Red warning
if (self.warningTimer === 0) {
self.isActive = true;
laserBeam.alpha = 0.9;
}
}
// Active laser movement
if (self.isActive) {
self.coreY += self.verticalSpeed * self.direction;
laserCore.y = self.coreY;
// Reverse direction at limits
if (self.coreY >= self.maxTravel || self.coreY <= -self.maxTravel) {
self.direction *= -1;
}
// Pulse effects
self.pulsePhase += 0.15;
var intensity = 0.8 + Math.sin(self.pulsePhase) * 0.2 + beatPulse * 0.3;
laserBeam.alpha = intensity;
laserCore.alpha = 1.0;
// Bright laser colors
laserBeam.tint = 0xff0088 + Math.floor(beatPulse * 100);
laserCore.tint = 0xffffff;
// Scale effects
var scale = 1 + beatPulse * 0.4;
laserBeam.scaleX = scale;
laserCore.scaleX = 1 + beatPulse * 0.6;
laserCore.scaleY = 1 + beatPulse * 0.6;
}
};
return self;
});
var LightLine = Container.expand(function () {
var self = Container.call(this);
var lineGfx = self.attachAsset('lightLine', {
anchorX: 0,
anchorY: 0.5
});
self.speed = -2 - Math.random() * 4;
self.pulsePhase = Math.random() * Math.PI * 2;
self.glowPhase = Math.random() * Math.PI * 2;
self.baseAlpha = 0.2 + Math.random() * 0.3;
self.update = function () {
self.x += self.speed;
self.pulsePhase += 0.08;
self.glowPhase += 0.05;
// Flowing glow effect
lineGfx.alpha = self.baseAlpha + Math.sin(self.glowPhase) * 0.2 + beatPulse * 0.2;
lineGfx.scaleY = 0.8 + Math.sin(self.pulsePhase) * 0.4 + beatPulse * 0.3;
// Color shift with beat
var colorShift = Math.floor(beatPulse * 100);
lineGfx.tint = 0x6644ff + (colorShift << 8);
};
return self;
});
var Obstacle = Container.expand(function () {
var self = Container.call(this);
var obstacleGfx = self.attachAsset('obstacle', {
anchorX: 0.5,
anchorY: 1
});
self.speed = -6;
self.pulsePhase = 0;
self.update = function () {
self.x += self.speed;
// Pulse effect
self.pulsePhase += 0.15;
var scale = 1 + Math.sin(self.pulsePhase) * 0.1;
obstacleGfx.scaleX = scale;
obstacleGfx.scaleY = scale;
// Beat sync glow
if (beatPulse > 0.5) {
obstacleGfx.tint = 0xffffff;
} else {
obstacleGfx.tint = 0xff0044;
}
};
return self;
});
var Particle = Container.expand(function () {
var self = Container.call(this);
var particleGfx = self.attachAsset('particle', {
anchorX: 0.5,
anchorY: 0.5
});
self.velocityX = 0;
self.velocityY = 0;
self.life = 60;
self.maxLife = 60;
self.update = function () {
self.x += self.velocityX;
self.y += self.velocityY;
self.velocityY += 0.2;
self.life--;
particleGfx.alpha = self.life / self.maxLife;
if (self.life <= 0) {
self.shouldDestroy = true;
}
};
return self;
});
var Platform = Container.expand(function () {
var self = Container.call(this);
var platformGfx = self.attachAsset('platform', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = -6;
self.glowPhase = 0;
self.beatPhase = 0;
self.flickerTimer = 0;
self.isVisible = true;
self.baseColor = 0x44ff88;
self.update = function () {
self.x += self.speed;
// Semi-transparent glow effect
self.glowPhase += 0.1;
platformGfx.alpha = 0.6 + Math.sin(self.glowPhase) * 0.2;
// Beat-synced flickering
self.beatPhase += 0.05;
if (beatPulse > 0.6) {
self.flickerTimer = 10;
}
if (self.flickerTimer > 0) {
self.flickerTimer--;
self.isVisible = Math.sin(self.flickerTimer * 0.8) > 0;
platformGfx.alpha = self.isVisible ? 0.6 + Math.sin(self.glowPhase) * 0.2 : 0.1;
}
// Color changes based on beat intensity
var intensityColor = Math.floor(beatPulse * 100);
var newColor = self.baseColor + (intensityColor << 8);
platformGfx.tint = newColor;
// Soft edge scaling effect
var scale = 1 + Math.sin(self.glowPhase * 0.5) * 0.05;
platformGfx.scaleX = scale;
platformGfx.scaleY = scale;
};
return self;
});
var Player = Container.expand(function () {
var self = Container.call(this);
// Create main glow aura behind character
var mainGlow = self.attachAsset('playerGlow', {
anchorX: 0.5,
anchorY: 0.5
});
mainGlow.alpha = 0.3;
mainGlow.y = -10;
// Create body parts with neon light appearance
var head = self.attachAsset('playerHead', {
anchorX: 0.5,
anchorY: 0.5
});
var body = self.attachAsset('playerBody', {
anchorX: 0.5,
anchorY: 0
});
var leftArm = self.attachAsset('playerArm', {
anchorX: 0.5,
anchorY: 0
});
var rightArm = self.attachAsset('playerArm', {
anchorX: 0.5,
anchorY: 0
});
var leftLeg = self.attachAsset('playerLeg', {
anchorX: 0.5,
anchorY: 0
});
var rightLeg = self.attachAsset('playerLeg', {
anchorX: 0.5,
anchorY: 0
});
// Position body parts relative to center
head.y = -30;
body.y = -12;
leftArm.x = -10;
leftArm.y = -8;
rightArm.x = 10;
rightArm.y = -8;
leftLeg.x = -6;
leftLeg.y = 13;
rightLeg.x = 6;
rightLeg.y = 13;
// Set initial electric blue color with glow effect
head.tint = 0x00ccff;
body.tint = 0x0099ff;
leftArm.tint = 0x0088ff;
rightArm.tint = 0x0088ff;
leftLeg.tint = 0x0077ff;
rightLeg.tint = 0x0077ff;
self.velocityY = 0;
self.velocityX = 0;
self.isGrounded = false;
self.isDashing = false;
self.dashCooldown = 0;
self.glowPhase = 0;
self.walkPhase = 0;
self.constantSpeed = 3; // Constant walking speed
self.hoverPhase = 0;
self.beatReactionTimer = 0;
self.currentHue = 0; // For color shifting
self.comboStreakColor = 0x00ccff; // Base electric blue
self.update = function () {
// Floating effect - character hovers above ground
self.hoverPhase += 0.08;
var hoverOffset = Math.sin(self.hoverPhase) * 3;
// Gravity with floating adjustment
if (!self.isGrounded) {
self.velocityY += 0.6; // Reduced gravity for lighter feel
}
// Apply velocity
self.y += self.velocityY;
self.x += self.velocityX;
// Constant forward movement when grounded
if (self.isGrounded && !self.isDashing) {
self.x += self.constantSpeed;
}
// Ground collision with hover offset
var groundThreshold = groundLevel - 35 + hoverOffset;
if (self.y >= groundThreshold) {
self.y = groundThreshold;
self.velocityY = 0;
self.isGrounded = true;
}
// When grounded and not moving, move backward with ground speed
if (self.isGrounded && self.velocityX === 0 && !self.isDashing) {
self.x -= gameSpeed;
}
// Dash cooldown
if (self.dashCooldown > 0) {
self.dashCooldown--;
}
// Rhythmic bouncing and running animation
if (self.isGrounded && !self.isDashing) {
self.walkPhase += 0.25;
// Energetic arm movements
leftArm.rotation = Math.sin(self.walkPhase) * 0.6;
rightArm.rotation = -Math.sin(self.walkPhase) * 0.6;
// Dynamic leg running motion
leftLeg.rotation = Math.sin(self.walkPhase + Math.PI) * 0.4;
rightLeg.rotation = Math.sin(self.walkPhase) * 0.4;
// Head bobbing with beat awareness
var beatBob = beatPulse > 0.5 ? beatPulse * 2 : 0;
head.y = -30 + Math.sin(self.walkPhase * 2) * 2 + beatBob;
} else {
// Reset positions when not walking
leftArm.rotation = 0;
rightArm.rotation = 0;
leftLeg.rotation = 0;
rightLeg.rotation = 0;
head.y = -30;
}
// Neon glow effects with beat reaction
self.glowPhase += 0.12;
var baseGlow = 0.9 + Math.sin(self.glowPhase) * 0.1;
var beatGlow = beatPulse * 0.3;
var totalGlow = Math.min(1.0, baseGlow + beatGlow);
// Beat reaction timer
if (self.beatReactionTimer > 0) {
self.beatReactionTimer--;
totalGlow = 1.0;
}
// Apply glow to all parts
head.alpha = totalGlow;
body.alpha = totalGlow;
leftArm.alpha = totalGlow;
rightArm.alpha = totalGlow;
leftLeg.alpha = totalGlow;
rightLeg.alpha = totalGlow;
// Main glow pulsing
mainGlow.alpha = 0.2 + beatPulse * 0.3;
mainGlow.scaleX = 1 + Math.sin(self.glowPhase * 0.7) * 0.1 + beatPulse * 0.2;
mainGlow.scaleY = 1 + Math.sin(self.glowPhase * 0.7) * 0.1 + beatPulse * 0.2;
// Color shifting based on combo streak and game phase
if (combo > 0) {
self.currentHue += 0.02;
var hueShift = Math.sin(self.currentHue) * 60;
if (gamePhase === 2) {
// Speed phase - orange/red colors
self.comboStreakColor = 0xff8800 + Math.floor(hueShift);
} else {
// Normal phase - blue colors
self.comboStreakColor = 0x0088ff + Math.floor(hueShift);
}
// Apply combo colors
head.tint = self.comboStreakColor + 0x2200;
body.tint = self.comboStreakColor;
leftArm.tint = self.comboStreakColor - 0x1100;
rightArm.tint = self.comboStreakColor - 0x1100;
leftLeg.tint = self.comboStreakColor - 0x2200;
rightLeg.tint = self.comboStreakColor - 0x2200;
mainGlow.tint = self.comboStreakColor;
} else {
if (gamePhase === 2) {
// Speed phase - orange colors
head.tint = 0xff9900;
body.tint = 0xff7700;
leftArm.tint = 0xff6600;
rightArm.tint = 0xff6600;
leftLeg.tint = 0xff5500;
rightLeg.tint = 0xff5500;
mainGlow.tint = 0xff8800;
} else {
// Normal phase - electric blue
head.tint = 0x00ccff;
body.tint = 0x0099ff;
leftArm.tint = 0x0088ff;
rightArm.tint = 0x0088ff;
leftLeg.tint = 0x0077ff;
rightLeg.tint = 0x0077ff;
mainGlow.tint = 0x0088ff;
}
self.currentHue = 0;
}
// Keep player on screen
if (self.x < 0) self.x = 0;
if (self.x > 2048) self.x = 2048;
};
self.jump = function () {
if (self.isGrounded) {
self.velocityY = -18;
self.isGrounded = false;
LK.getSound('jump').play();
self.createJumpEffect();
}
};
self.dash = function () {
if (self.dashCooldown <= 0) {
self.velocityX = 15;
self.isDashing = true;
self.dashCooldown = 30;
LK.getSound('dash').play();
self.createDashEffect();
tween(self, {
velocityX: 0
}, {
duration: 400
});
LK.setTimeout(function () {
self.isDashing = false;
}, 400);
}
};
self.createJumpEffect = function () {
for (var i = 0; i < 5; i++) {
var particle = new Particle();
particle.x = self.x + (Math.random() - 0.5) * 40;
particle.y = self.y + 20;
particle.velocityY = Math.random() * 5 + 2;
particle.velocityX = (Math.random() - 0.5) * 8;
game.addChild(particle);
particles.push(particle);
}
};
self.createDashEffect = function () {
for (var i = 0; i < 8; i++) {
var particle = new Particle();
particle.x = self.x - 30;
particle.y = self.y + (Math.random() - 0.5) * 40;
particle.velocityY = (Math.random() - 0.5) * 6;
particle.velocityX = -Math.random() * 10 - 5;
game.addChild(particle);
particles.push(particle);
}
};
// React to beats with flash and pulse
self.reactToBeat = function () {
self.beatReactionTimer = 8; // Flash for 8 frames
// Bright flash effect
tween(self, {
alpha: 1.2
}, {
duration: 100,
easing: tween.easeOut,
onFinish: function onFinish() {
tween(self, {
alpha: 1.0
}, {
duration: 200,
easing: tween.easeInOut
});
}
});
// Scale pulse
tween(self, {
scaleX: 1.1,
scaleY: 1.1
}, {
duration: 150,
easing: tween.easeOut,
onFinish: function onFinish() {
tween(self, {
scaleX: 1.0,
scaleY: 1.0
}, {
duration: 250,
easing: tween.easeInOut
});
}
});
};
return self;
});
var RotatingCube = Container.expand(function () {
var self = Container.call(this);
var cubeGfx = self.attachAsset('rotatingCube', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = -6;
self.rotationSpeed = 0.1 + Math.random() * 0.1;
self.pulsePhase = 0;
self.glowPhase = Math.random() * Math.PI * 2;
self.update = function () {
self.x += self.speed;
// Continuous rotation
cubeGfx.rotation += self.rotationSpeed;
// Pulse effect with beat
self.pulsePhase += 0.1;
var scale = 1 + Math.sin(self.pulsePhase) * 0.2 + beatPulse * 0.3;
cubeGfx.scaleX = scale;
cubeGfx.scaleY = scale;
// Glow effect
self.glowPhase += 0.08;
cubeGfx.alpha = 0.8 + Math.sin(self.glowPhase) * 0.2 + beatPulse * 0.2;
// Color shifting
var colorShift = Math.floor(beatPulse * 100);
cubeGfx.tint = 0xff4400 + (colorShift << 4);
};
return self;
});
var ShatterPart = Container.expand(function () {
var self = Container.call(this);
var shatterGfx = self.attachAsset('shatter', {
anchorX: 0.5,
anchorY: 0.5
});
self.velocityX = 0;
self.velocityY = 0;
self.rotationSpeed = 0;
self.life = 60;
self.maxLife = 60;
self.gravity = 0.2;
self.update = function () {
self.x += self.velocityX;
self.y += self.velocityY;
self.velocityY += self.gravity;
self.velocityX *= 0.96;
shatterGfx.rotation += self.rotationSpeed;
self.life--;
var alpha = self.life / self.maxLife;
shatterGfx.alpha = alpha;
var scale = alpha * 0.8;
shatterGfx.scaleX = scale;
shatterGfx.scaleY = scale;
if (self.life <= 0) {
self.shouldDestroy = true;
}
};
return self;
});
var TrailParticle = Container.expand(function () {
var self = Container.call(this);
var particleGfx = self.attachAsset('trailGlow', {
anchorX: 0.5,
anchorY: 0.5
});
self.life = 40;
self.maxLife = 40;
self.targetX = 0;
self.targetY = 0;
self.followSpeed = 0.12;
self.pulsePhase = Math.random() * Math.PI * 2;
self.update = function () {
// Follow target with smooth movement
self.x += (self.targetX - self.x) * self.followSpeed;
self.y += (self.targetY - self.y) * self.followSpeed;
self.life--;
self.pulsePhase += 0.15;
// Bright motion trail that pulses with beat
var fadeAlpha = self.life / self.maxLife;
var pulseEffect = 1 + Math.sin(self.pulsePhase) * 0.3 + beatPulse * 0.4;
particleGfx.alpha = fadeAlpha * 0.8 * pulseEffect;
var scale = fadeAlpha * 1.2 * pulseEffect;
particleGfx.scaleX = scale;
particleGfx.scaleY = scale;
// Color matches player's current color and game phase
if (gamePhase === 2) {
particleGfx.tint = player ? player.comboStreakColor : 0xff8800;
} else {
particleGfx.tint = player ? player.comboStreakColor : 0x00aaff;
}
if (self.life <= 0) {
self.shouldDestroy = true;
}
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x0a0520
});
/****
* Game Code
****/
// Game variables
var player;
var obstacles = [];
var rotatingCubes = [];
var laserBeams = [];
var explosionParts = [];
var shatterParts = [];
var platforms = [];
var particles = [];
var trailParticles = [];
var ambientParticles = [];
var burstParticles = [];
var backgroundShapes = [];
var lightLines = [];
var dataStreamParticles = [];
var holographicElements = [];
var groundLevel = 2200;
var gameSpeed = 6;
var spawnTimer = 0;
var beatTimer = 0;
var beatInterval = 60; // 60 frames = 1 second at 60fps
var beatPulse = 0;
var combo = 0;
var perfectHits = 0;
var trailTimer = 0;
var ambientTimer = 0;
var bgShapeTimer = 0;
var lightLineTimer = 0;
var dataStreamTimer = 0;
var holographicTimer = 0;
// Game phase variables
var gamePhase = 1; // 1 = normal, 2 = speed phase after 1000 points
var phaseTransitioned = false;
// Camera variables
var cameraTargetX = 0;
var cameraTargetY = 0;
var cameraShakeIntensity = 0;
var cameraShakeDecay = 0.9;
var cameraZoom = 1;
var cameraTargetZoom = 1;
var cameraFollowSpeed = 0.1;
// UI
var scoreText = new Text2('Score: 0', {
size: 80,
fill: 0x00FFFF
});
scoreText.anchor.set(0, 0);
scoreText.x = 100;
scoreText.y = 100;
LK.gui.topLeft.addChild(scoreText);
var comboText = new Text2('Combo: 0', {
size: 60,
fill: 0xFFFF00
});
comboText.anchor.set(0, 0);
comboText.x = 100;
comboText.y = 200;
LK.gui.topLeft.addChild(comboText);
// Create ground with shimmer effects
var ground = [];
for (var i = 0; i < 12; i++) {
var groundSegment = new GroundSegment();
groundSegment.x = i * 300;
groundSegment.y = groundLevel;
ground.push(groundSegment);
game.addChild(groundSegment);
}
// Create player
player = new Player();
player.x = 300;
player.y = groundLevel - 30;
game.addChild(player);
// Background pulse effect
function updateBackgroundPulse() {
var intensity = beatPulse * 0.2;
var fastSection = gameSpeed > 8 ? 1 : 0; // Detect fast sections
if (gamePhase === 2) {
// Speed phase - orange/red colors
var baseRed = 60 + Math.floor(intensity * 50) + fastSection * 40;
var baseGreen = 20 + Math.floor(intensity * 30) + fastSection * 20;
var baseBlue = 5 + Math.floor(intensity * 15) + fastSection * 10;
} else {
// Normal phase - deep black to dark purple with intensity variations
var baseRed = 10 + Math.floor(intensity * 30) + fastSection * 20;
var baseGreen = 5 + Math.floor(intensity * 20) + fastSection * 10;
var baseBlue = 32 + Math.floor(intensity * 40) + fastSection * 30;
}
var backgroundColor = baseRed << 16 | baseGreen << 8 | baseBlue;
game.setBackgroundColor(backgroundColor);
}
// Camera system with smooth scrolling and beat sync
function updateCamera() {
// Smooth camera follow player
cameraTargetX = -player.x + 400; // Offset to keep player visible
cameraTargetY = -player.y + 1600; // Vertical centering
// Apply smooth camera movement
game.x += (cameraTargetX - game.x) * cameraFollowSpeed;
game.y += (cameraTargetY - game.y) * cameraFollowSpeed;
// Apply camera shake
if (cameraShakeIntensity > 0) {
game.x += (Math.random() - 0.5) * cameraShakeIntensity;
game.y += (Math.random() - 0.5) * cameraShakeIntensity;
cameraShakeIntensity *= cameraShakeDecay;
}
// Smooth zoom interpolation
cameraZoom += (cameraTargetZoom - cameraZoom) * 0.05;
game.scaleX = cameraZoom;
game.scaleY = cameraZoom;
// Beat-synced zoom pulse
if (beatPulse > 0.8) {
cameraTargetZoom = 1.05;
} else {
cameraTargetZoom = 1.0;
}
}
// Spawn obstacles on beat
function spawnObstacle() {
var obstacleType = Math.random();
if (obstacleType < 0.4) {
// Regular obstacle
var obstacle = new Obstacle();
obstacle.x = 2200;
obstacle.y = groundLevel;
obstacles.push(obstacle);
game.addChild(obstacle);
} else if (obstacleType < 0.7) {
// Rotating cube
var cube = new RotatingCube();
cube.x = 2200;
cube.y = groundLevel - 60 - Math.random() * 80;
rotatingCubes.push(cube);
game.addChild(cube);
} else {
// Laser beam
var laser = new LaserBeam();
laser.x = 2200;
laser.y = groundLevel - 200;
laserBeams.push(laser);
game.addChild(laser);
}
}
// Spawn platforms
function spawnPlatform() {
var platform = new Platform();
platform.x = 2200;
platform.y = groundLevel - 150 - Math.random() * 100;
platforms.push(platform);
game.addChild(platform);
}
// Create player trail particles
function createTrailParticles() {
trailTimer++;
if (trailTimer >= 3) {
// Create trail every 3 frames
trailTimer = 0;
var trail = new TrailParticle();
trail.x = player.x + (Math.random() - 0.5) * 20;
trail.y = player.y + (Math.random() - 0.5) * 20;
trail.targetX = player.x - 50;
trail.targetY = player.y + 10;
trailParticles.push(trail);
game.addChild(trail);
}
}
// Create radial burst particles for perfect hits
function createPerfectBurst(x, y, color) {
for (var i = 0; i < 12; i++) {
var angle = i / 12 * Math.PI * 2;
var speed = 8 + Math.random() * 4;
var burst = new BurstParticle();
burst.x = x;
burst.y = y;
burst.velocityX = Math.cos(angle) * speed;
burst.velocityY = Math.sin(angle) * speed;
var burstGfx = burst.children[0];
burstGfx.tint = color;
burstParticles.push(burst);
game.addChild(burst);
}
}
// Create ambient floating particles
function createAmbientParticles() {
ambientTimer++;
if (ambientTimer >= 20) {
// Create ambient particles every 20 frames
ambientTimer = 0;
var ambient = new AmbientParticle();
ambient.x = player.x + 1200 + Math.random() * 400;
ambient.y = Math.random() * 2732;
var ambientGfx = ambient.children[0];
ambientGfx.tint = 0x888888 + Math.floor(Math.random() * 0x444444);
ambientParticles.push(ambient);
game.addChild(ambient);
}
}
// Create beat-synced particle wave
function createBeatWave() {
for (var i = 0; i < 8; i++) {
var wave = new BurstParticle();
wave.x = -200 + i * 300;
wave.y = groundLevel - 100;
wave.velocityX = 6;
wave.velocityY = -2 + (Math.random() - 0.5) * 4;
wave.life = 60;
wave.maxLife = 60;
var waveGfx = wave.children[0];
waveGfx.tint = 0x00ffff;
burstParticles.push(wave);
game.addChild(wave);
}
}
// Create background abstract shapes
function createBackgroundShapes() {
bgShapeTimer++;
if (bgShapeTimer >= 120) {
bgShapeTimer = 0;
var bgShape = new BackgroundShape();
bgShape.x = 2200 + Math.random() * 400;
bgShape.y = Math.random() * 2000;
backgroundShapes.push(bgShape);
game.addChild(bgShape);
}
}
// Create flowing light lines
function createLightLines() {
lightLineTimer++;
if (lightLineTimer >= 180) {
lightLineTimer = 0;
var lightLine = new LightLine();
lightLine.x = 2200;
lightLine.y = Math.random() * 2732;
lightLine.rotation = (Math.random() - 0.5) * 0.5;
lightLines.push(lightLine);
game.addChild(lightLine);
}
}
// Create data stream particles
function createDataStreamParticles() {
dataStreamTimer++;
if (dataStreamTimer >= 15) {
dataStreamTimer = 0;
var dataStream = new DataStreamParticle();
dataStream.x = 2200 + Math.random() * 200;
dataStream.y = Math.random() * 2732;
dataStreamParticles.push(dataStream);
game.addChild(dataStream);
}
}
// Create holographic musical elements
function createHolographicElements() {
holographicTimer++;
if (holographicTimer >= 600) {
// Less frequent appearance
holographicTimer = 0;
var holographic = new HolographicElement();
holographic.x = 1500 + Math.random() * 800;
holographic.y = 200 + Math.random() * 1800;
holographicElements.push(holographic);
game.addChild(holographic);
}
}
// Create explosion effect when obstacle is destroyed
function createExplosion(x, y, color) {
for (var i = 0; i < 8; i++) {
var explosion = new ExplosionPart();
explosion.x = x + (Math.random() - 0.5) * 40;
explosion.y = y + (Math.random() - 0.5) * 40;
explosion.velocityX = (Math.random() - 0.5) * 12;
explosion.velocityY = -Math.random() * 8 - 2;
explosion.rotationSpeed = (Math.random() - 0.5) * 0.3;
var explosionGfx = explosion.children[0];
explosionGfx.tint = color;
explosionParts.push(explosion);
game.addChild(explosion);
}
}
// Create shatter effect when obstacle breaks
function createShatter(x, y, originalColor) {
for (var i = 0; i < 6; i++) {
var shatter = new ShatterPart();
shatter.x = x + (Math.random() - 0.5) * 30;
shatter.y = y + (Math.random() - 0.5) * 30;
shatter.velocityX = (Math.random() - 0.5) * 8;
shatter.velocityY = -Math.random() * 6 - 1;
shatter.rotationSpeed = (Math.random() - 0.5) * 0.2;
var shatterGfx = shatter.children[0];
shatterGfx.tint = originalColor;
shatterParts.push(shatter);
game.addChild(shatter);
}
}
// Check collisions
function checkCollisions() {
// Regular obstacle collisions
for (var i = obstacles.length - 1; i >= 0; i--) {
var obstacle = obstacles[i];
if (player.intersects(obstacle)) {
if (player.isDashing) {
// Destroy obstacle with explosion effect
createExplosion(obstacle.x, obstacle.y, 0xff4400);
createShatter(obstacle.x, obstacle.y, 0xff0044);
LK.getSound('successHit').play();
LK.setScore(LK.getScore() + 25);
combo++;
} else {
LK.getSound('failureMiss').play();
LK.effects.flashScreen(0xff0000, 500);
combo = 0;
LK.setScore(Math.max(0, LK.getScore() - 50));
// Intense camera shake on collision
cameraShakeIntensity = 20;
tween(game, {
scaleX: 0.9,
scaleY: 0.9
}, {
duration: 200,
easing: tween.easeOut,
onFinish: function onFinish() {
tween(game, {
scaleX: 1.0,
scaleY: 1.0
}, {
duration: 400,
easing: tween.easeInOut
});
}
});
}
// Remove obstacle
obstacle.destroy();
obstacles.splice(i, 1);
}
}
// Rotating cube collisions
for (var i = rotatingCubes.length - 1; i >= 0; i--) {
var cube = rotatingCubes[i];
if (player.intersects(cube)) {
if (player.isDashing) {
// Destroy cube with spectacular explosion
createExplosion(cube.x, cube.y, 0xff8800);
createShatter(cube.x, cube.y, 0xff4400);
LK.getSound('successHit').play();
LK.setScore(LK.getScore() + 35);
combo++;
cameraShakeIntensity = 8;
} else {
LK.getSound('failureMiss').play();
LK.effects.flashScreen(0xff0000, 500);
combo = 0;
LK.setScore(Math.max(0, LK.getScore() - 75));
cameraShakeIntensity = 25;
}
cube.destroy();
rotatingCubes.splice(i, 1);
}
}
// Laser beam collisions
for (var i = laserBeams.length - 1; i >= 0; i--) {
var laser = laserBeams[i];
if (laser.isActive && player.intersects(laser)) {
LK.getSound('failureMiss').play();
LK.effects.flashScreen(0xff0088, 600);
combo = 0;
LK.setScore(Math.max(0, LK.getScore() - 100));
cameraShakeIntensity = 30;
// Create explosion at collision point
createExplosion(player.x, player.y, 0xff0088);
// Remove laser
laser.destroy();
laserBeams.splice(i, 1);
}
}
}
// Beat detection and rhythm mechanics
function updateBeat() {
beatTimer++;
// Simple beat simulation (in real game this would sync with music)
if (beatTimer >= beatInterval) {
beatTimer = 0;
beatPulse = 1;
// Make player react to every beat
if (player) {
player.reactToBeat();
}
// Beat-synced camera shake and zoom
cameraShakeIntensity = 8;
tween(game, {
scaleX: 1.08,
scaleY: 1.08
}, {
duration: 150,
easing: tween.easeOut,
onFinish: function onFinish() {
tween(game, {
scaleX: 1.0,
scaleY: 1.0
}, {
duration: 300,
easing: tween.easeInOut
});
}
});
// Spawn obstacles on beat
if (Math.random() < 0.7) {
spawnObstacle();
}
// Spawn platforms occasionally
if (Math.random() < 0.3) {
spawnPlatform();
}
// Create beat-synced particle wave
createBeatWave();
}
// Beat pulse decay
beatPulse *= 0.9;
}
// Touch controls
game.down = function (x, y, obj) {
if (x < 1024) {
// Left side - jump
player.jump();
// Check if jump was on beat
if (beatPulse > 0.7) {
perfectHits++;
combo++;
LK.setScore(LK.getScore() + 10 + combo * 2);
LK.getSound('successHit').play();
LK.effects.flashObject(player, 0x00ff00, 200);
// Camera shake for perfect jump
cameraShakeIntensity = 5;
// Create radial burst particles
createPerfectBurst(player.x, player.y, 0x00ff00);
}
} else {
// Right side - dash
player.dash();
// Check if dash was on beat
if (beatPulse > 0.7) {
perfectHits++;
combo++;
LK.setScore(LK.getScore() + 15 + combo * 3);
LK.getSound('successHit').play();
LK.effects.flashObject(player, 0xffff00, 200);
// Camera shake for perfect dash
cameraShakeIntensity = 6;
// Create radial burst particles
createPerfectBurst(player.x, player.y, 0xffff00);
}
}
};
// Main game loop
game.update = function () {
updateBeat();
updateBackgroundPulse();
updateCamera();
checkCollisions();
// Update ground segments
for (var i = 0; i < ground.length; i++) {
if (ground[i].x <= -300) {
ground[i].x += 3600; // 12 * 300
}
}
// Update and remove obstacles
for (var i = obstacles.length - 1; i >= 0; i--) {
if (obstacles[i].x < -100) {
obstacles[i].destroy();
obstacles.splice(i, 1);
// Bonus points for passing obstacles
LK.setScore(LK.getScore() + 5);
}
}
// Update and remove rotating cubes
for (var i = rotatingCubes.length - 1; i >= 0; i--) {
if (rotatingCubes[i].x < -100) {
rotatingCubes[i].destroy();
rotatingCubes.splice(i, 1);
LK.setScore(LK.getScore() + 8);
}
}
// Update and remove laser beams
for (var i = laserBeams.length - 1; i >= 0; i--) {
if (laserBeams[i].x < -100) {
laserBeams[i].destroy();
laserBeams.splice(i, 1);
LK.setScore(LK.getScore() + 10);
}
}
// Update and remove explosion parts
for (var i = explosionParts.length - 1; i >= 0; i--) {
if (explosionParts[i].shouldDestroy) {
explosionParts[i].destroy();
explosionParts.splice(i, 1);
}
}
// Update and remove shatter parts
for (var i = shatterParts.length - 1; i >= 0; i--) {
if (shatterParts[i].shouldDestroy) {
shatterParts[i].destroy();
shatterParts.splice(i, 1);
}
}
// Update and remove platforms
for (var i = platforms.length - 1; i >= 0; i--) {
if (platforms[i].x < -200) {
platforms[i].destroy();
platforms.splice(i, 1);
}
}
// Update and remove particles
for (var i = particles.length - 1; i >= 0; i--) {
if (particles[i].shouldDestroy) {
particles[i].destroy();
particles.splice(i, 1);
}
}
// Update and remove trail particles
for (var i = trailParticles.length - 1; i >= 0; i--) {
if (trailParticles[i].shouldDestroy) {
trailParticles[i].destroy();
trailParticles.splice(i, 1);
}
}
// Update and remove burst particles
for (var i = burstParticles.length - 1; i >= 0; i--) {
if (burstParticles[i].shouldDestroy) {
burstParticles[i].destroy();
burstParticles.splice(i, 1);
}
}
// Update and remove ambient particles
for (var i = ambientParticles.length - 1; i >= 0; i--) {
if (ambientParticles[i].shouldDestroy) {
ambientParticles[i].destroy();
ambientParticles.splice(i, 1);
}
}
// Update and remove background shapes
for (var i = backgroundShapes.length - 1; i >= 0; i--) {
if (backgroundShapes[i].x < -200) {
backgroundShapes[i].destroy();
backgroundShapes.splice(i, 1);
}
}
// Update and remove light lines
for (var i = lightLines.length - 1; i >= 0; i--) {
if (lightLines[i].x < -500) {
lightLines[i].destroy();
lightLines.splice(i, 1);
}
}
// Update and remove data stream particles
for (var i = dataStreamParticles.length - 1; i >= 0; i--) {
if (dataStreamParticles[i].shouldDestroy || dataStreamParticles[i].x < -100) {
dataStreamParticles[i].destroy();
dataStreamParticles.splice(i, 1);
}
}
// Update and remove holographic elements
for (var i = holographicElements.length - 1; i >= 0; i--) {
if (holographicElements[i].shouldDestroy || holographicElements[i].x < -400) {
holographicElements[i].destroy();
holographicElements.splice(i, 1);
}
}
// Create continuous particle effects
createTrailParticles();
createAmbientParticles();
// Create background environment effects
createBackgroundShapes();
createLightLines();
createDataStreamParticles();
createHolographicElements();
// Update UI
scoreText.setText('Score: ' + LK.getScore());
comboText.setText('Combo: ' + combo);
// Gradually increase difficulty
if (LK.ticks % 1800 == 0) {
// Every 30 seconds
gameSpeed += 0.5;
beatInterval = Math.max(30, beatInterval - 2);
}
// Game over condition (if player falls off screen)
if (player.y > 2732 + 100) {
LK.showGameOver();
}
// Phase transition at 1000 points
if (LK.getScore() >= 1000 && !phaseTransitioned) {
phaseTransitioned = true;
gamePhase = 2;
// Increase speed dramatically
gameSpeed += 8;
beatInterval = Math.max(20, beatInterval - 15);
// Change music with fade effect
LK.playMusic('speedPhaseMusic', {
fade: {
start: 0,
end: 1,
duration: 2000
}
});
// Visual effect for transition
LK.effects.flashScreen(0xff8800, 2000);
// Camera shake for dramatic effect
cameraShakeIntensity = 40;
// Scale pulse effect
tween(game, {
scaleX: 0.8,
scaleY: 0.8
}, {
duration: 500,
easing: tween.easeOut,
onFinish: function onFinish() {
tween(game, {
scaleX: 1.0,
scaleY: 1.0
}, {
duration: 1000,
easing: tween.easeInOut
});
}
});
}
// New win condition at higher score
if (LK.getScore() >= 2500) {
LK.showYouWin();
}
};
// Start the music
LK.playMusic('mainBgMusic');
; ===================================================================
--- original.js
+++ change.js
@@ -546,13 +546,19 @@
// Main glow pulsing
mainGlow.alpha = 0.2 + beatPulse * 0.3;
mainGlow.scaleX = 1 + Math.sin(self.glowPhase * 0.7) * 0.1 + beatPulse * 0.2;
mainGlow.scaleY = 1 + Math.sin(self.glowPhase * 0.7) * 0.1 + beatPulse * 0.2;
- // Color shifting based on combo streak
+ // Color shifting based on combo streak and game phase
if (combo > 0) {
self.currentHue += 0.02;
var hueShift = Math.sin(self.currentHue) * 60;
- self.comboStreakColor = 0x0088ff + Math.floor(hueShift);
+ if (gamePhase === 2) {
+ // Speed phase - orange/red colors
+ self.comboStreakColor = 0xff8800 + Math.floor(hueShift);
+ } else {
+ // Normal phase - blue colors
+ self.comboStreakColor = 0x0088ff + Math.floor(hueShift);
+ }
// Apply combo colors
head.tint = self.comboStreakColor + 0x2200;
body.tint = self.comboStreakColor;
leftArm.tint = self.comboStreakColor - 0x1100;
@@ -560,16 +566,27 @@
leftLeg.tint = self.comboStreakColor - 0x2200;
rightLeg.tint = self.comboStreakColor - 0x2200;
mainGlow.tint = self.comboStreakColor;
} else {
- // Reset to electric blue
- head.tint = 0x00ccff;
- body.tint = 0x0099ff;
- leftArm.tint = 0x0088ff;
- rightArm.tint = 0x0088ff;
- leftLeg.tint = 0x0077ff;
- rightLeg.tint = 0x0077ff;
- mainGlow.tint = 0x0088ff;
+ if (gamePhase === 2) {
+ // Speed phase - orange colors
+ head.tint = 0xff9900;
+ body.tint = 0xff7700;
+ leftArm.tint = 0xff6600;
+ rightArm.tint = 0xff6600;
+ leftLeg.tint = 0xff5500;
+ rightLeg.tint = 0xff5500;
+ mainGlow.tint = 0xff8800;
+ } else {
+ // Normal phase - electric blue
+ head.tint = 0x00ccff;
+ body.tint = 0x0099ff;
+ leftArm.tint = 0x0088ff;
+ rightArm.tint = 0x0088ff;
+ leftLeg.tint = 0x0077ff;
+ rightLeg.tint = 0x0077ff;
+ mainGlow.tint = 0x0088ff;
+ }
self.currentHue = 0;
}
// Keep player on screen
if (self.x < 0) self.x = 0;
@@ -742,10 +759,14 @@
particleGfx.alpha = fadeAlpha * 0.8 * pulseEffect;
var scale = fadeAlpha * 1.2 * pulseEffect;
particleGfx.scaleX = scale;
particleGfx.scaleY = scale;
- // Color matches player's current color
- particleGfx.tint = player ? player.comboStreakColor : 0x00aaff;
+ // Color matches player's current color and game phase
+ if (gamePhase === 2) {
+ particleGfx.tint = player ? player.comboStreakColor : 0xff8800;
+ } else {
+ particleGfx.tint = player ? player.comboStreakColor : 0x00aaff;
+ }
if (self.life <= 0) {
self.shouldDestroy = true;
}
};
@@ -791,8 +812,11 @@
var bgShapeTimer = 0;
var lightLineTimer = 0;
var dataStreamTimer = 0;
var holographicTimer = 0;
+// Game phase variables
+var gamePhase = 1; // 1 = normal, 2 = speed phase after 1000 points
+var phaseTransitioned = false;
// Camera variables
var cameraTargetX = 0;
var cameraTargetY = 0;
var cameraShakeIntensity = 0;
@@ -834,12 +858,19 @@
// Background pulse effect
function updateBackgroundPulse() {
var intensity = beatPulse * 0.2;
var fastSection = gameSpeed > 8 ? 1 : 0; // Detect fast sections
- // Deep black to dark purple with intensity variations
- var baseRed = 10 + Math.floor(intensity * 30) + fastSection * 20;
- var baseGreen = 5 + Math.floor(intensity * 20) + fastSection * 10;
- var baseBlue = 32 + Math.floor(intensity * 40) + fastSection * 30;
+ if (gamePhase === 2) {
+ // Speed phase - orange/red colors
+ var baseRed = 60 + Math.floor(intensity * 50) + fastSection * 40;
+ var baseGreen = 20 + Math.floor(intensity * 30) + fastSection * 20;
+ var baseBlue = 5 + Math.floor(intensity * 15) + fastSection * 10;
+ } else {
+ // Normal phase - deep black to dark purple with intensity variations
+ var baseRed = 10 + Math.floor(intensity * 30) + fastSection * 20;
+ var baseGreen = 5 + Math.floor(intensity * 20) + fastSection * 10;
+ var baseBlue = 32 + Math.floor(intensity * 40) + fastSection * 30;
+ }
var backgroundColor = baseRed << 16 | baseGreen << 8 | baseBlue;
game.setBackgroundColor(backgroundColor);
}
// Camera system with smooth scrolling and beat sync
@@ -1336,10 +1367,47 @@
// Game over condition (if player falls off screen)
if (player.y > 2732 + 100) {
LK.showGameOver();
}
- // Win condition
- if (LK.getScore() >= 1000) {
+ // Phase transition at 1000 points
+ if (LK.getScore() >= 1000 && !phaseTransitioned) {
+ phaseTransitioned = true;
+ gamePhase = 2;
+ // Increase speed dramatically
+ gameSpeed += 8;
+ beatInterval = Math.max(20, beatInterval - 15);
+ // Change music with fade effect
+ LK.playMusic('speedPhaseMusic', {
+ fade: {
+ start: 0,
+ end: 1,
+ duration: 2000
+ }
+ });
+ // Visual effect for transition
+ LK.effects.flashScreen(0xff8800, 2000);
+ // Camera shake for dramatic effect
+ cameraShakeIntensity = 40;
+ // Scale pulse effect
+ tween(game, {
+ scaleX: 0.8,
+ scaleY: 0.8
+ }, {
+ duration: 500,
+ easing: tween.easeOut,
+ onFinish: function onFinish() {
+ tween(game, {
+ scaleX: 1.0,
+ scaleY: 1.0
+ }, {
+ duration: 1000,
+ easing: tween.easeInOut
+ });
+ }
+ });
+ }
+ // New win condition at higher score
+ if (LK.getScore() >= 2500) {
LK.showYouWin();
}
};
// Start the music
2d rock for game. In-Game asset. 2d. High contrast. No shadows
agaç gövdesi 2d. In-Game asset. 2d. High contrast. No shadows
bush 2d. In-Game asset. 2d. High contrast. No shadows
nehiri kaldır
oxygen tank 2d. In-Game asset. 2d. High contrast. No shadows
shark shadow 2d. In-Game asset. 2d. High contrast. No shadows
2 yapraklı deniz yosunu 2d. In-Game asset. 2d. High contrast. No shadows
piranha 2d. In-Game asset. 2d. High contrast. No shadows
deniz mercanı 2d. In-Game asset. 2d. High contrast. No shadows
jump
Sound effect
dash
Sound effect
failureMiss
Sound effect
mainBgMusic
Music
skyLevelMusic
Music
speedMusic
Music
natureMusic
Music
jumpNature
Sound effect
jumpUnderwater
Sound effect
dashNature
Sound effect
dashUnderwater
Sound effect
underwaterMusic
Music
jumpSpeed
Sound effect
dashSpeed
Sound effect