document.addEventListener('DOMContentLoaded', () => {
const circle = document.getElementById('circle');
const smiley = document.getElementById('smiley');
const errorMessages = document.getElementById('error-messages');
const container = document.getElementById('container');
let lastX = 0;
let lastY = 0;
let currentX = 0;
let currentY = 0;
let velocityX = 0;
let velocityY = 0;
let size = 30;
let isExploded = false;
let isSecondPhase = false;
const errorCodes = [
'ERR_CIRCLE_OVERFLOW',
'CRITICAL_VELOCITY_EXCEEDED',
'SYSTEM_FAILURE_0x8F2A',
'BUFFER_OVERFLOW_EXCEPTION',
'RENDER_ENGINE_CRASH',
'PHYSICS_MODEL_BREAKDOWN',
'DIMENSION_BOUNDARY_BREACH',
'0xDEADBEEF',
'CIRCULAR_REFERENCE_ERROR',
'CATASTROPHIC_FAILURE'
];
function update() {
// Smooth follow with natural motion
velocityX = (currentX - lastX) * 0.2;
velocityY = (currentY - lastY) * 0.2;
// Calculate speed (distance moved per frame)
const speed = Math.sqrt(velocityX * velocityX + velocityY * velocityY);
// Update circle position with smoothing
lastX += (currentX - lastX) * 0.2;
lastY += (currentY - lastY) * 0.2;
if (!isExploded && !isSecondPhase) {
circle.style.left = `${lastX}px`;
circle.style.top = `${lastY}px`;
// Adjust size based on mouse speed
size = 30 + speed * 1.5;
circle.style.width = `${size}px`;
circle.style.height = `${size}px`;
// Check if circle should pop
if (size > 100) {
explodeCircle();
}
}
requestAnimationFrame(update);
}
function explodeCircle() {
isExploded = true;
circle.classList.add('hidden');
errorMessages.classList.remove('hidden');
// Show random error messages
let messageCount = 0;
const maxMessages = 100;
const showErrors = setInterval(() => {
const randomX = Math.floor(Math.random() * window.innerWidth);
const randomY = Math.floor(Math.random() * window.innerHeight);
const randomError = errorCodes[Math.floor(Math.random() * errorCodes.length)];
const errorElement = document.createElement('div');
errorElement.textContent = randomError;
errorElement.style.position = 'absolute';
errorElement.style.left = `${randomX}px`;
errorElement.style.top = `${randomY}px`;
errorMessages.appendChild(errorElement);
messageCount++;
if (messageCount >= maxMessages) {
clearInterval(showErrors);
// Reset after a delay
setTimeout(() => {
resetToSmiley();
}, 3000);
}
}, 50);
}
function resetToSmiley() {
errorMessages.classList.add('hidden');
errorMessages.innerHTML = '';
smiley.classList.remove('hidden');
isSecondPhase = true;
}
document.addEventListener('mousemove', (event) => {
currentX = event.clientX;
currentY = event.clientY;
});
update();
});