@@ -520,10 +520,85 @@ window.toggleScreenshotMode = function() {
520520document . addEventListener ( 'DOMContentLoaded' , ( ) => {
521521 const devToolsVisible = localStorage . getItem ( 'devToolsVisible' ) === 'true' ;
522522 const devPanel = document . getElementById ( 'dev-tools' ) ;
523+ // Add this to your initialization script
524+ let skillHoverCount = 0 ;
525+
523526 if ( devToolsVisible && devPanel ) {
524527 devPanel . classList . remove ( 'hidden' ) ;
525528 }
526529
527530 applyTheme ( localStorage . getItem ( 'theme' ) || 'light' ) ;
528531 updateGameUI ( ) ;
529532} ) ;
533+
534+ /**
535+ * 9. ENHANCED XP & SKILL MINING SYSTEM
536+ */
537+ let currentXP = JSON . parse ( localStorage . getItem ( 'userXP' ) ) || 0 ;
538+ const XP_PER_LEVEL = 20 ; // Adjust this to make leveling harder/easier
539+
540+ function addExperience ( amount ) {
541+ // Stop XP if at Max Level or if system is locked (Self-Destruct)
542+ const isLocked = document . getElementById ( 'dev-tools' ) ?. hasAttribute ( 'data-lock' ) ;
543+ if ( unlockedEggs . length >= LEVELS . length - 1 || isLocked ) return ;
544+
545+ currentXP += amount ;
546+
547+ // Check for Level Up
548+ // If XP exceeds threshold, we "unlock" a new egg/level
549+ if ( currentXP >= XP_PER_LEVEL ) {
550+ currentXP = 0 ; // Reset for next level
551+ unlockEgg ( `level_up_${ unlockedEggs . length + 1 } ` ) ;
552+ }
553+
554+ localStorage . setItem ( 'userXP' , JSON . stringify ( currentXP ) ) ;
555+ updateGameUI ( ) ;
556+ }
557+
558+ function createFloatingXP ( event ) {
559+ const float = document . createElement ( 'div' ) ;
560+ // Color matches Level 5 "Data Miner" Cyan
561+ const levelColor = LEVELS [ unlockedEggs . length ] ?. color || '#06b6d4' ;
562+
563+ float . innerText = '+1 XP' ;
564+ float . style . cssText = `
565+ position: fixed;
566+ left: ${ event . clientX } px;
567+ top: ${ event . clientY } px;
568+ color: ${ levelColor } ;
569+ font-family: monospace;
570+ font-weight: 900;
571+ font-size: 14px;
572+ pointer-events: none;
573+ z-index: 10000;
574+ animation: float-up 0.8s ease-out forwards;
575+ text-shadow: 0 0 10px rgba(0,0,0,0.5);
576+ ` ;
577+
578+ document . body . appendChild ( float ) ;
579+ setTimeout ( ( ) => float . remove ( ) , 800 ) ;
580+ }
581+
582+ function initSkillXP ( ) {
583+ const skills = document . querySelectorAll ( '.skill-item' ) ;
584+ skills . forEach ( skill => {
585+ skill . addEventListener ( 'mouseenter' , ( e ) => {
586+ const isLocked = document . getElementById ( 'dev-tools' ) ?. hasAttribute ( 'data-lock' ) ;
587+ if ( ! isLocked ) {
588+ addExperience ( 1 ) ;
589+ createFloatingXP ( e ) ;
590+
591+ // Fancy scale-up on hover
592+ skill . style . transform = "scale(1.1) translateY(-2px)" ;
593+ skill . style . transition = "transform 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275)" ;
594+ }
595+ } ) ;
596+
597+ skill . addEventListener ( 'mouseleave' , ( ) => {
598+ skill . style . transform = "scale(1) translateY(0)" ;
599+ } ) ;
600+ } ) ;
601+ }
602+
603+ // Re-initialize skills after Surprise scroll or any DOM changes
604+ window . addEventListener ( 'DOMContentLoaded' , initSkillXP ) ;
0 commit comments