d', function() { resetGame(); createSparkles(); setTimeout(() => { if (!gameState.isPlaying) { document.getElementById('currentLine').innerHTML = '🖤💖 Welcome to BOOMBAYAH Typing! Ready to become a BLINK Master? 💖🖤'; } }, 2000); }); // Keyboard shortcuts document.addEventListener('keydown', function(e) { if (e.ctrlKey || e.metaKey) { switch(e.key) { case 's': e.preventDefault(); if (!gameState.isPlaying) startGame(); break; case 'r': e.preventDefault(); resetGame(); break; case ' ': e.preventDefault(); togglePause(); break; } } }); // Additional game features function getRandomEncouragement() { const encouragements = [ "💥 BOOMBAYAH! Keep going!", "🖤💖 BLINK power activated!", "🔥 You're on fire like BLACKPINK!", "⚡ Lightning fast typing!", "💎 Diamond-level performance!", "👑 Royal BLINK status!" ]; return encouragements[Math.floor(Math.random() * encouragements.length)]; } // Show encouragement every 5 correct lines let lastEncouragementIndex = 0; function maybeShowEncouragement() { if (gameState.currentLineIndex > 0 && gameState.currentLineIndex % 5 === 0 && gameState.currentLineIndex !== lastEncouragementIndex) { lastEncouragementIndex = gameState.currentLineIndex; const encouragement = getRandomEncouragement(); // Create floating encouragement const encouragementEl = document.createElement('div'); encouragementEl.textContent = encouragement; encouragementEl.style.position = 'fixed'; encouragementEl.style.top = '30%'; encouragementEl.style.left = '50%'; encouragementEl.style.transform = 'translate(-50%, -50%)'; encouragementEl.style.fontSize = '2em'; encouragementEl.style.fontWeight = 'bold'; encouragementEl.style.color = '#FF69B4'; encouragementEl.style.textShadow = '0 0 20px #FF1493'; encouragementEl.style.zIndex = '1000'; encouragementEl.style.animation = 'pinkSparkle 2s ease-in-out'; encouragementEl.style.pointerEvents = 'none'; document.body.appendChild(encouragementEl); setTimeout(() => encouragementEl.remove(), 2000); } } // Enhanced input handling with encouragement const originalInputHandler = document.getElementById('typingInput').oninput; document.getElementById('typingInput').addEventListener('input', function(e) { // Call original handler logic here (already defined above) // Then add encouragement check maybeShowEncouragement(); }); // Perfect accuracy streak tracking let perfectStreak = 0; function updatePerfectStreak() { const accuracy = gameState.totalChars > 0 ? (gameState.correctChars / gameState.totalChars) * 100 : 0; if (accuracy === 100 && gameState.currentLineIndex > 0) { perfectStreak++; if (perfectStreak === 10 && !gameState.achievements.has('perfect10')) { gameState.achievements.add('perfect10'); showAchievement('🎯 PERFECT STREAK: 10 lines with 100% accuracy!'); } } else if (accuracy < 100) { perfectStreak = 0; } } // Enhanced achievement system function checkAdvancedAchievements() { updatePerfectStreak(); // Speed achievements if (gameState.wpm >= 80 && !gameState.achievements.has('speed80')) { gameState.achievements.add('speed80'); showAchievement('🚀 ROCKET FINGERS: 80+ WPM achieved!'); } if (gameState.wpm >= 100 && !gameState.achievements.has('speed100')) { gameState.achievements.add('speed100'); showAchievement('⚡ LIGHTNING MASTER: 100+ WPM achieved!'); } // Combo achievements if (gameState.combo >= 20 && !gameState.achievements.has('combo20')) { gameState.achievements.add('combo20'); showAchievement('🔥 COMBO LEGEND: 20x combo achieved!'); } // Completion achievements if (gameState.currentLineIndex >= 20 && !gameState.achievements.has('almost')) { gameState.achievements.add('almost'); showAchievement('💪 ALMOST THERE: 20+ lines completed!'); } // Score achievements if (gameState.score >= 10000 && !gameState.achievements.has('score10k')) { gameState.achievements.add('score10k'); showAchievement('💎 HIGH SCORER: 10,000+ points achieved!'); } if (gameState.score >= 50000 && !gameState.achievements.has('score50k')) { gameState.achievements.add('score50k'); showAchievement('👑 SCORE ROYALTY: 50,000+ points achieved!'); } } // Enhanced checkAchievements function const originalCheckAchievements = checkAchievements; checkAchievements = function() { originalCheckAchievements(); checkAdvancedAchievements(); }; // Game statistics tracking let gameStats = { gamesPlayed: 0, totalTimeSpent: 0, bestWPM: 0, bestAccuracy: 0, totalCharactersTyped: 0 }; // Save stats to local storage equivalent (using variables since localStorage not available) function updateGameStats() { gameStats.gamesPlayed++; if (gameState.startTime) { gameStats.totalTimeSpent += (Date.now() - gameState.startTime); } gameStats.bestWPM = Math.max(gameStats.bestWPM, gameState.wpm); const currentAccuracy = gameState.totalChars > 0 ? Math.round((gameState.correctChars / gameState.totalChars) * 100) : 0; gameStats.bestAccuracy = Math.max(gameStats.bestAccuracy, currentAccuracy); gameStats.totalCharactersTyped += gameState.correctChars; } // Enhanced finish game const originalFinishGame = finishGame; finishGame = function() { updateGameStats(); originalFinishGame(); // Show final stats setTimeout(() => { let statsMessage = `🏆 GAME COMPLETE! 🏆\n\n`; statsMessage += `⚡ Final WPM: ${gameState.wpm}\n`; statsMessage += `🎯 Final Accuracy: ${gameState.totalChars > 0 ? Math.round((gameState.correctChars / gameState.totalChars) * 100) : 0}%\n`; statsMessage += `💎 Final Score: ${gameState.score.toLocaleString()}\n`; statsMessage += `🔥 Max Combo: ${gameState.combo}\n\n`; statsMessage += `📊 Your Best Records:\n`; statsMessage += `🚀 Best WPM: ${gameStats.bestWPM}\n`; statsMessage += `🎯 Best Accuracy: ${gameStats.bestAccuracy}%\n`; statsMessage += `🎮 Games Played: ${gameStats.gamesPlayed}\n`; // Show as overlay instead of alert showGameCompleteOverlay(statsMessage); }, 1000); }; function showGameCompleteOverlay(message) { const overlay = document.createElement('div'); overlay.style.position = 'fixed'; overlay.style.top = '0'; overlay.style.left = '0'; overlay.style.width = '100%'; overlay.style.height = '100%'; overlay.style.backgroundColor = 'rgba(0, 0, 0, 0.8)'; overlay.style.display = 'flex'; overlay.style.alignItems = 'center'; overlay.style.justifyContent = 'center'; overlay.style.zIndex = '9999'; overlay.style.animation = 'pinkSparkle 0.5s ease-in-out'; const messageBox = document.createElement('div'); messageBox.style.backgroundColor = '#FF1493'; messageBox.style.color = 'white'; messageBox.style.padding = '30px'; messageBox.style.borderRadius = '20px'; messageBox.style.border = '3px solid #FF69B4'; messageBox.style.textAlign = 'center'; messageBox.style.fontSize = '1.2em'; messageBox.style.fontWeight = 'bold'; messageBox.style.maxWidth = '80%'; messageBox.style.boxShadow = '0 0 50px #FF69B4'; messageBox.innerHTML = message.replace(/\n/g, '
'); const closeButton = document.createElement('button'); closeButton.textContent = '🖤💖 CLOSE 💖🖤'; closeButton.style.marginTop = '20px'; closeButton.style.padding = '10px 20px'; closeButton.style.backgroundColor = '#000'; closeButton.style.color = '#FF69B4'; closeButton.style.border = '2px solid #FF69B4'; closeButton.style.borderRadius = '10px'; closeButton.style.fontSize = '1em'; closeButton.style.fontWeight = 'bold'; closeButton.style.cursor = 'pointer'; closeButton.onclick = () => overlay.remove(); messageBox.appendChild(closeButton); overlay.appendChild(messageBox); document.body.appendChild(overlay); } // Dynamic background effects function createDynamicBackground() { setInterval(() => { if (gameState.isPlaying && !gameState.isPaused) { createSparkles(); } }, 3000); } // Initialize dynamic features document.addEventListener('DOMContentLoaded', function() { createDynamicBackground(); // Add welcome effect setTimeout(() => { if (!gameState.isPlaying) { const welcomeSparkles = () => createSparkles(); for (let i = 0; i < 5; i++) { setTimeout(welcomeSparkles, i * 500); } } }, 1000); }); // Performance monitoring function monitorPerformance() { const performanceData = { averageWPM: gameState.wpm, currentAccuracy: gameState.totalChars > 0 ? (gameState.correctChars / gameState.totalChars) * 100 : 0, timeElapsed: gameState.startTime ? (Date.now() - gameState.startTime) / 1000 : 0, linesCompleted: gameState.currentLineIndex }; // Could be used for analytics or adaptive difficulty return performanceData; } // Auto-save progress (simulation since no localStorage) let autoSaveInterval; function startAutoSave() { autoSaveInterval = setInterval(() => { if (gameState.isPlaying) { const progress = { currentLineIndex: gameState.currentLineIndex, score: gameState.score, difficulty: currentDifficulty, achievements: Array.from(gameState.achievements) }; // In a real implementation, this would save to localStorage console.log('Auto-saved progress:', progress); } }, 30000); // Auto-save every 30 seconds } function stopAutoSave() { if (autoSaveInterval) { clearInterval(autoSaveInterval); } } // Enhanced game start const originalStartGame = startGame; startGame = function() { originalStartGame(); startAutoSave(); }; // Enhanced game reset const originalResetGame = resetGame; resetGame = function() { originalResetGame(); stopAutoSave(); perfectStreak = 0; lastEncouragementIndex = 0; }; // Initialize everything document.addEventListener('DOMContentLoaded', function() { console.log('🖤💖 BOOMBAYAH Typing Master Loaded! 💖🖤'); console.log('Features: Full lyrics, Golden animations, Achievement system, Performance tracking'); });