Code edit (9 edits merged)
Please save this source code
Code edit (8 edits merged)
Please save this source code
User prompt
update `var isLocked = currentScore < songUnlockLimit[trackIndex];` to use highScore instead of currentScore
Code edit (5 edits merged)
Please save this source code
User prompt
When starting a song (from start button or menu) set the score to 0. When song ends, store the highscore per track (use songHighscore) in the menu, show the all tracks highScore ↪💡 Consider importing and using the following plugins: @upit/storage.v1
Code edit (1 edits merged)
Please save this source code
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); var storage = LK.import("@upit/storage.v1", { score: 0, songHighscore: [0, 0, 0] }); /**** * Classes ****/ var BackgroundManager = Container.expand(function () { var self = Container.call(this); self.bg0 = self.attachAsset('background01', { anchorX: 0.5, anchorY: 0.5, x: 1024, y: 1366, scaleX: 2.4, scaleY: 2.4, alpha: 1 }); self.bg1 = self.attachAsset('background01', { anchorX: 0.5, anchorY: 0.5, x: 1024, y: 1366, scaleX: 1.1, scaleY: 1.1, alpha: 1 }); self.bg2 = self.attachAsset('background01', { anchorX: 0.5, anchorY: 0.5, x: 1024, y: 1366, scaleX: 0.5, scaleY: 0.5, alpha: 1 }); self.bg3 = self.attachAsset('background01', { anchorX: 0.5, anchorY: 0.5, x: 1024, y: 1366, scaleX: 0.22, scaleY: 0.22, alpha: 1 }); self.bg4 = self.attachAsset('background01', { anchorX: 0.5, anchorY: 0.5, x: 1024, y: 1366, scaleX: 0.11, scaleY: 0.11, alpha: 1 }); self.tore0 = self.attachAsset('tore', { anchorX: 0.5, anchorY: 0.5, x: 1024, y: 1366, scaleX: 1.2, scaleY: 1.2, alpha: 1 }); self.tore1 = self.attachAsset('tore', { anchorX: 0.5, anchorY: 0.5, x: 1024, y: 1366, scaleX: 0.6, scaleY: 0.6, alpha: 1 }); self.tore2 = self.attachAsset('tore', { anchorX: 0.5, anchorY: 0.5, x: 1024, y: 1366, scaleX: 0.26, scaleY: 0.26, alpha: 1 }); self.tore3 = self.attachAsset('tore', { anchorX: 0.5, anchorY: 0.5, x: 1024, y: 1366, scaleX: 0.12, scaleY: 0.12, alpha: 1 }); if (isDebug) { self.bg1.tint = 0xFF0000; self.tore1.tint = 0x00FF00; self.bg2.tint = 0x00FFFF; self.tore2.tint = 0xFF00FF; self.bg3.tint = 0xfff200; } else { self.bg0.tint = 0x1697b8; self.tore0.tint = 0x1697b8; self.bg1.tint = 0x1697b8; self.tore1.tint = 0x1697b8; self.bg2.tint = 0x1697b8; self.tore2.tint = 0x1697b8; self.bg3.tint = 0x1697b8; self.tore3.tint = 0x1697b8; self.bg4.tint = 0x1697b8; } self.bgAnimationSpeed = globalSpeed / 1000; self.bgAnimationAcceleration = 2; self.backgrounds = [self.bg0, self.tore0, self.bg1, self.tore1, self.bg2, self.tore2, self.bg3, self.tore3, self.bg4]; self.bgAnimStartTime = Date.now(); self.update = function () { if (!songStarted) { tween.stop(self.bg0, { scaleX: true, scaleY: true }); tween.stop(self.bg1, { scaleX: true, scaleY: true }); tween.stop(self.bg2, { scaleX: true, scaleY: true }); tween.stop(self.bg3, { scaleX: true, scaleY: true }); tween.stop(self.bg4, { scaleX: true, scaleY: true }); tween.stop(self.tore0, { scaleX: true, scaleY: true }); tween.stop(self.tore1, { scaleX: true, scaleY: true }); tween.stop(self.tore2, { scaleX: true, scaleY: true }); tween.stop(self.tore3, { scaleX: true, scaleY: true }); return; } var now = Date.now(); var elapsed = now - self.bgAnimStartTime; var resetTriggered = false; for (var i = 0; i < self.backgrounds.length; i++) { var bg = self.backgrounds[i]; bg.scaleX += self.bgAnimationSpeed * bg.scaleX; bg.scaleY = bg.scaleX; if (bg.scaleX > 3.0) { bg.scaleX = 0.12; bg.scaleY = bg.scaleX; } bg.tint = 0x1697b8; } }; return self; }); var Ball = Container.expand(function () { var self = Container.call(this); var ballGraphics = self.attachAsset('ball', { anchorX: 0.5, anchorY: 0.5, tint: currentColor, alpha: isDebug ? 1 : 0 }); self.speedX = 0; self.speedY = 0; self.lastIntersectingGates = {}; self.lastIntersectingOrbs = {}; self.update = function () { if (!songStarted) { return; } if (runner) { self.x = runner.x - (isJumping ? 120 : 80) * Math.cos(runner.rotation + Math.PI * 0.5); self.y = runner.y - (isJumping ? 120 : 80) * Math.sin(runner.rotation + Math.PI * 0.5); self.rotation = runner.rotation; } if (gateManager && gateManager.gates) { for (var i = gateManager.gates.length - 1; i >= 0; i--) { var gate = gateManager.gates[i]; var gateId = gate.gateId; if (self.lastIntersectingGates[gateId] === undefined) { self.lastIntersectingGates[gateId] = false; } var currentIntersecting = gate.boundingBox.scaleX >= minGateDetectionScale && gate.boundingBox.scaleX <= maxGateDetectionScale && self.intersects(gate.boundingBox); if (!self.lastIntersectingGates[gateId] && currentIntersecting) { var looseOrbsAnim = new LooseOrbsAnim(gate.directionAngle); looseOrbsAnim.x = self.x; looseOrbsAnim.y = self.y; game.addChild(looseOrbsAnim); playHitSound(); var now = Date.now(); if (now - lastGateHitTime <= 1000) { gatePenaltyValue = Math.max(-10, gatePenaltyValue * 2); } else { gatePenaltyValue = -2; } lastGateHitTime = now; var currentScore = LK.getScore(); var newScore = Math.max(0, Math.min(9999, currentScore + gatePenaltyValue)); LK.setScore(newScore); storage.score = newScore; if (game.updateScore) { game.updateScore(); } if (scoreLabel && scoreLabel.showPenalty) { scoreLabel.showPenalty(gatePenaltyValue); } if (!gate.isDestroying) { gate.isDestroying = true; tween(gate, { scaleX: 0, scaleY: 0 }, { duration: 300, easing: tween.easeIn, onFinish: function onFinish() { gateManager.destroyGate(gate); } }); } } self.lastIntersectingGates[gateId] = currentIntersecting; } } if (orbManager && orbManager.orbs) { for (var i = orbManager.orbs.length - 1; i >= 0; i--) { var orb = orbManager.orbs[i]; var orbId = orb.orbId; if (self.lastIntersectingOrbs[orbId] === undefined) { self.lastIntersectingOrbs[orbId] = false; } var currentIntersecting = self.isScaleForIntersect(orb) && self.intersects(orb.boundingBox); if (!self.lastIntersectingOrbs[orbId] && currentIntersecting) { var sparkAnim = new SparkAnim(); sparkAnim.x = self.x; sparkAnim.y = self.y; game.addChild(sparkAnim); // Add fireworks for special orbs if (orb.special) { var fireworksAnim = new FireworksAnim(); fireworksAnim.x = self.x; fireworksAnim.y = self.y; game.addChild(fireworksAnim); // Add a white flash to the screen LK.effects.flashScreen(0xFFFFFF, 500); } if (orb.special) { LK.getSound('grabSpecial').play(); } else { //LK.getSound('grab').play(); } var newScore = Math.min(9999, LK.getScore() + (orb.special ? 20 : 1)); LK.setScore(newScore); storage.score = newScore; if (game.updateScore) { game.updateScore(); } orb.destroy(); orbManager.orbs.splice(i, 1); delete self.lastIntersectingOrbs[orbId]; continue; } self.lastIntersectingOrbs[orbId] = currentIntersecting; } } }; self.isScaleForIntersect = function (orb) { var isReachable = orb.currentScale >= minOrbDetectionScale && orb.currentScale <= maxOrbDetectionScale; if (orb.special) { isReachable = orb.currentScale >= minOrbDetectionScale + 0.2 && orb.currentScale <= maxOrbDetectionScale + 0.2; } return isReachable; }; return self; }); var ConfettiAnim = Container.expand(function () { var self = Container.call(this); self.confettiPieces = []; self.spawnTime = Date.now(); self.lifetime = 5000; self.spawnDuration = 2000; self.lastSpawnTime = 0; self.spawnInterval = 5; var futuristicBlueTint = 0x32cbec; self.spawnConfettiPiece = function () { var assetType; var random = Math.random(); if (random < 0.2) { assetType = 'note'; } else if (random < 0.4) { assetType = 'note2'; } else { assetType = 'line'; } var piece; if (assetType === 'line') { var confettiColors = [0xFF073A, 0x39FF14, 0x00FFFF, 0xF3F315, 0xFF61F6, 0x32cbec]; var randomColor = confettiColors[Math.floor(Math.random() * confettiColors.length)]; piece = self.attachAsset(assetType, { anchorX: 0.5, anchorY: 0.5, tint: randomColor, alpha: 0.8, scaleX: 3 + Math.random() * 5, scaleY: 0.5 + Math.random() * 1.5 }); } else { piece = self.attachAsset(assetType, { anchorX: 0.5, anchorY: 0.5, tint: futuristicBlueTint, alpha: 0.8, scaleX: 0.3 + Math.random() * 0.4, scaleY: 0.3 + Math.random() * 0.4 }); } piece.x = Math.random() * 2048; piece.y = -100; piece.vx = (Math.random() - 0.5) * 100; piece.vy = 400 + Math.random() * 400; piece.rotationSpeed = (Math.random() - 0.5) * 4; self.confettiPieces.push(piece); tween(piece, { alpha: 0 }, { duration: self.lifetime, easing: tween.linear }); }; self.update = function () { var now = Date.now(); var elapsed = now - self.spawnTime; if (elapsed < self.spawnDuration && now - self.lastSpawnTime >= self.spawnInterval) { self.spawnConfettiPiece(); self.lastSpawnTime = now; } var deltaTime = 16 / 1000; for (var i = self.confettiPieces.length - 1; i >= 0; i--) { var piece = self.confettiPieces[i]; piece.x += piece.vx * deltaTime; piece.y += piece.vy * deltaTime; piece.rotation += piece.rotationSpeed * deltaTime; if (piece.y > 2832 || elapsed >= self.lifetime) { piece.destroy(); self.confettiPieces.splice(i, 1); } } if (elapsed >= self.lifetime && self.confettiPieces.length === 0) { self.destroy(); } }; return self; }); var FireworksAnim = Container.expand(function () { var self = Container.call(this); self.particles = []; self.lifetime = 4000; self.spawnTime = Date.now(); // Create explosion particles var particleCount = 100; var colors = [0xFF073A, 0x39FF14, 0x00FFFF, 0xF3F315, 0xFF61F6, 0x32cbec]; for (var i = 0; i < particleCount; i++) { var angle = Math.PI * 2 / particleCount * i; var speed = 500 + Math.random() * 200; var particle = self.attachAsset('line', { anchorX: 0.5, anchorY: 0.5, width: 10, height: 6, scaleX: 3, scaleY: 0.5, tint: colors[Math.floor(Math.random() * colors.length)], alpha: 1 }); particle.rotation = angle; particle.vx = Math.cos(angle) * speed; particle.vy = Math.sin(angle) * speed; self.particles.push(particle); // Fade out particle tween(particle, { alpha: 0, scaleX: 0.5, scaleY: 0.1 }, { duration: self.lifetime, easing: tween.easeOut }); } // Create center flash var flash = self.attachAsset('glow', { anchorX: 0.5, anchorY: 0.5, scaleX: 0.1, scaleY: 0.1, alpha: 1, blendMode: 1 }); tween(flash, { scaleX: 3, scaleY: 3, alpha: 0 }, { duration: 1500, easing: tween.easeOut }); self.update = function () { var deltaTime = 16 / 1000; for (var i = 0; i < self.particles.length; i++) { var particle = self.particles[i]; particle.x += particle.vx * deltaTime; particle.y += particle.vy * deltaTime; particle.vy += 200 * deltaTime; // Gravity particle.vx *= 0.98; // Drag } var elapsed = Date.now() - self.spawnTime; if (elapsed >= self.lifetime) { self.destroy(); } }; return self; }); var Gate = Container.expand(function () { var self = Container.call(this); self.directionAngle = 0; self.boundingBox = self.attachAsset('boundingBox', { anchorX: 0.5, anchorY: 0.5, x: 1024, y: 2450, alpha: 0.9 }); self.gateColor = 0xFFFFFF; self.gateId = null; self.updateScale = function (newScale) { self.boundingBox.scaleX = newScale; self.boundingBox.scaleY = newScale; var distance = (2450 - 1366) * newScale; self.boundingBox.x = centerX + distance * Math.cos(self.directionAngle + Math.PI * 0.5); self.boundingBox.y = centerY + distance * Math.sin(self.directionAngle + Math.PI * 0.5); self.boundingBox.rotation = self.directionAngle; }; return self; }); var GateManager = Container.expand(function () { var self = Container.call(this); self.gates = []; self.gateAnimStartTime = 0; self.gateAnimationSpeed = globalSpeed / 1000; self.currentSong = songListV4[0]; self.gateBeats = filterGateData(0); self.songStartTime = 0; self.currentNoteIndex = 0; self.noteSpawnScale = 0.12; self.lastGateAngle = null; self.lastProcessedBeat = -1; self.spawnGateAtTime = function () { var beatValue = null; if (self.currentNoteIndex < self.gateBeats.length) { beatValue = self.gateBeats[self.currentNoteIndex].b; } var startScale = self.noteSpawnScale; var endScale = 1.0; var speed = self.gateAnimationSpeed; var timeToReachPlayer = Math.log(endScale / startScale) / speed; var beatAngle = centerAngle; if (beatValue === "1") { beatAngle = rightAngle; } else if (beatValue === "2") { beatAngle = leftAngle; } else { beatAngle = centerAngle; } self.lastGateAngle = beatAngle; var allAngles = [leftAngle, centerAngle, rightAngle]; var gateAngles = []; for (var i = 0; i < allAngles.length; i++) { if (allAngles[i] !== beatAngle) { gateAngles.push(allAngles[i]); } } var now = Date.now(); var songElapsed = now - self.songStartTime; var beatTime = self.gateBeats[self.currentNoteIndex].t; var spawnTime = beatTime - timeToReachPlayer; for (var j = 0; j < gateAngles.length; j++) { var gate = new Gate(); gate.updateScale(self.noteSpawnScale); gate.spawnTime = Date.now() + 200 / globalSpeed; gate.colorIndex = 0; gate.gateId = getNextGateId(); gate.directionAngle = gateAngles[j]; if (songElapsed >= spawnTime) { self.gates.push(gate); self.addChild(gate); } else { (function (g) { LK.setTimeout(function () { self.gates.push(g); self.addChild(g); }, spawnTime - songElapsed); })(gate); } } if (gateAngles.length === 2 && orbManager) { if (songElapsed >= spawnTime) { orbManager.spawnOrb(beatAngle, beatTime); } else { (function (angle) { LK.setTimeout(function () { orbManager.spawnOrb(angle, beatTime); }, spawnTime - songElapsed); })(beatAngle); } } }; self.update = function () { if (!songStarted) { return; } if (!songStarted) { return; } var now = Date.now(); var songElapsed = now - self.songStartTime; if (self.currentNoteIndex < self.gateBeats.length) { var nextBeat = self.gateBeats[self.currentNoteIndex]; if (songElapsed >= nextBeat.t) { if (now - lastBeatTime >= skipBeatDelay) { self.spawnGateAtTime(); lastBeatTime = now; } self.currentNoteIndex++; } } for (var i = self.gates.length - 1; i >= 0; i--) { var gate = self.gates[i]; var currentScale = gate.boundingBox.scaleX; var newScale = currentScale + self.gateAnimationSpeed * currentScale; if (newScale > 3.0) { gate.destroy(); self.gates.splice(i, 1); } else { gate.updateScale(newScale); } } self.checkSongEnd(); }; self.resetSong = function () { self.songStartTime = Date.now(); self.currentNoteIndex = 0; self.lastGateAngle = null; }; self.checkSongEnd = function () { if (self.currentNoteIndex >= self.gateBeats.length) { var songDuration = self.currentSong.duration || 156000; var songElapsed = Date.now() - self.songStartTime; if (songElapsed >= songDuration && songStarted) { var currentScoreValue = LK.getScore(); // currentTrackIndex is a global variable reflecting the song that just ended if (songHighscore && typeof currentTrackIndex === 'number' && currentTrackIndex >= 0 && currentTrackIndex < songHighscore.length) { if (currentScoreValue > songHighscore[currentTrackIndex]) { songHighscore[currentTrackIndex] = currentScoreValue; storage.songHighscore = songHighscore; // Persist the updated array } } else { // Fallback/Initialization if currentTrackIndex is out of bounds or songHighscore is not proper // This case should ideally not be hit if currentTrackIndex and storage init are correct. if (!songHighscore) { songHighscore = []; } while (songHighscore.length <= currentTrackIndex) { songHighscore.push(0); } if (currentScoreValue > songHighscore[currentTrackIndex]) { songHighscore[currentTrackIndex] = currentScoreValue; storage.songHighscore = songHighscore; } } songStarted = false; LK.stopMusic(); if (progressBar) { tween.stop(progressBar.bar, { width: true }); } if (menuIcon) { menuIcon.visible = false; } if (speakerManager && speakerManager.speakers) { LK.setTimeout(function () { for (var i = 0; i < speakerManager.speakers.length; i++) { var speaker = speakerManager.speakers[i]; var exitX, exitY; if (i === 0) { exitX = speaker.x - 800; exitY = speaker.y; } else if (i === 1) { exitX = speaker.x; exitY = speaker.y - 800; } else { exitX = speaker.x + 800; exitY = speaker.y; } tween(speaker, { x: exitX, y: exitY, alpha: 0 }, { duration: 1200, easing: tween.easeIn, onFinish: function onFinish() { if (i === speakerManager.speakers.length - 1) { speakerManager.speakers = []; } } }); } }, 1000); } if (runner) { runner.isReturningToInitial = true; runner.shouldStartIdleAfterReturn = true; runner.isPlayingIdleAnim = false; tween(runner, { x: 1024, y: 2000, rotation: 0 }, { duration: 1000, easing: tween.easeOut, onFinish: function onFinish() { runner.isReturningToInitial = false; runner.shouldStartIdleAfterReturn = false; runner.startIdleSequence(); var confettiAnim = new ConfettiAnim(); game.addChild(confettiAnim); LK.getSound('cheers').play(); // Set hasFinishedTrack01 to true if this was track01 if (self.currentSong && self.currentSong.name === "Words Fly Fast") { hasFinishedTrack01 = true; storage.hasFinishedTrack01 = true; } } }); } if (ball) { tween(ball, { x: 1024, y: 2000, rotation: 0 }, { duration: 1000, easing: tween.easeOut }); } for (var j = self.gates.length - 1; j >= 0; j--) { self.gates[j].destroy(); } self.gates = []; } } }; self.destroyGate = function (gate) { var index = self.gates.indexOf(gate); if (index > -1) { self.gates.splice(index, 1); gate.destroy(); } }; return self; }); var HelpIndicator = Container.expand(function () { var self = Container.call(this); self.moveHelpShown = false; self.jumpHelpShown = false; self.gameStartTime = gateManager ? gateManager.songStartTime : Date.now(); // Create help move graphic (initially hidden) self.helpMoveGraphic = self.attachAsset('helpMove', { anchorX: 0.5, anchorY: 0.5, x: 1024, y: 1000, alpha: 0, scaleX: 0.8, scaleY: 0.8 }); // Create help jump graphic (initially hidden) self.helpJumpGraphic = self.attachAsset('helpJump', { anchorX: 0.5, anchorY: 0.5, x: 1480, y: 1000, alpha: 0, scaleX: 0.8, scaleY: 0.8 }); self.showHelpMove = function () { if (self.moveHelpShown) { return; } self.moveHelpShown = true; // Fade in help move tween(self.helpMoveGraphic, { alpha: 1, scaleX: 1.0, scaleY: 1.0 }, { duration: 300, easing: tween.easeOut, onFinish: function onFinish() { // Start horizontal movement animation var moveBackAndForth = function moveBackAndForth() { tween(self.helpMoveGraphic, { x: 1224 }, { duration: 400, easing: tween.easeInOut, onFinish: function onFinish() { tween(self.helpMoveGraphic, { x: 824 }, { duration: 400, easing: tween.easeInOut, onFinish: function onFinish() { tween(self.helpMoveGraphic, { x: 1024 }, { duration: 400, easing: tween.easeInOut, onFinish: function onFinish() { tween(self.helpMoveGraphic, { x: 824 }, { duration: 400, easing: tween.easeInOut, onFinish: function onFinish() { tween(self.helpMoveGraphic, { x: 1024 }, { duration: 400, easing: tween.easeInOut }); } }); } }); } }); } }); }; moveBackAndForth(); // Keep visible for 2000ms, then fade out LK.setTimeout(function () { tween(self.helpMoveGraphic, { alpha: 0, scaleX: 0.8, scaleY: 0.8 }, { duration: 600, easing: tween.easeIn }); }, 2000); } }); }; self.showHelpJump = function () { if (self.jumpHelpShown) { return; } self.jumpHelpShown = true; // Fade in help jump tween(self.helpJumpGraphic, { alpha: 1, scaleX: 1.0, scaleY: 1.0 }, { duration: 400, easing: tween.easeOut, onFinish: function onFinish() { // Start double tap scale animation var scaleAnimation = function scaleAnimation() { tween(self.helpJumpGraphic, { scaleX: 1.2, scaleY: 1.2 }, { duration: 150, easing: tween.easeOut, onFinish: function onFinish() { tween(self.helpJumpGraphic, { scaleX: 1.0, scaleY: 1.0 }, { duration: 150, easing: tween.easeIn, onFinish: function onFinish() { // Second tap tween(self.helpJumpGraphic, { scaleX: 1.2, scaleY: 1.2 }, { duration: 150, easing: tween.easeOut, onFinish: function onFinish() { tween(self.helpJumpGraphic, { scaleX: 1.0, scaleY: 1.0 }, { duration: 150, easing: tween.easeIn }); } }); } }); } }); }; scaleAnimation(); // Keep visible for 2000ms, then fade out LK.setTimeout(function () { tween(self.helpJumpGraphic, { alpha: 0, scaleX: 0.8, scaleY: 0.8 }, { duration: 400, easing: tween.easeIn }); }, 2000); } }); }; self.update = function () { if (!songStarted || hasFinishedTrack01) { return; } var now = Date.now(); var elapsed = now - self.gameStartTime; // Show help move after 2000ms if (!self.moveHelpShown && elapsed >= 2000) { self.showHelpMove(); } // Help jump is now triggered when first special orb spawns (handled in OrbManager) }; self.reset = function () { self.moveHelpShown = false; self.jumpHelpShown = false; self.gameStartTime = gateManager ? gateManager.songStartTime : Date.now(); tween.stop(self.helpMoveGraphic); tween.stop(self.helpJumpGraphic); self.helpMoveGraphic.alpha = 0; self.helpJumpGraphic.alpha = 0; }; return self; }); var LooseOrbsAnim = Container.expand(function (gateAngle) { var self = Container.call(this); self.orbs = []; self.lifetime = 2000; self.spawnTime = Date.now(); self.gateAngle = gateAngle || 0; var orbCount = 3 + Math.floor(Math.random() * 3); var randScale = 0.3 + Math.random() * 0.4; for (var i = 0; i < orbCount; i++) { var orbAsset = self.attachAsset('orb', { anchorX: 0.5, anchorY: 0.5, alpha: 0.8, scaleX: randScale, scaleY: randScale }); orbAsset.x = (Math.random() - 0.5) * 100; orbAsset.y = (Math.random() - 0.5) * 100; var baseAngle = self.gateAngle - Math.PI / 2; var angleSpread = Math.PI * 0.6; var angle = baseAngle + (Math.random() - 0.5) * angleSpread; var speed = 200 + Math.random() * 200; orbAsset.velocityX = Math.cos(angle) * speed; orbAsset.velocityY = Math.sin(angle) * speed - 200; orbAsset.gravity = 1200; self.orbs.push(orbAsset); LK.setTimeout(function () { tween(orbAsset, { alpha: 0 }, { duration: self.lifetime, easing: tween.easeOut }); }, 1000); tween(orbAsset, { rotation: Math.PI * 6 - Math.random() * Math.PI * 12 }, { duration: self.lifetime, easing: tween.linear }); } self.update = function () { var deltaTime = 16 / 1000; for (var i = 0; i < self.orbs.length; i++) { var orb = self.orbs[i]; orb.velocityY += orb.gravity * deltaTime; orb.x += orb.velocityX * deltaTime; orb.y += orb.velocityY * deltaTime; orb.scaleX += 0.4 * deltaTime; orb.scaleY = orb.scaleX; } var elapsed = Date.now() - self.spawnTime; if (elapsed >= self.lifetime) { self.destroy(); } }; return self; }); var MenuIcon = Container.expand(function () { var self = Container.call(this); var iconGraphics = self.attachAsset('menuIcon', { anchorX: 0.5, anchorY: 0.5, alpha: 1 }); self.down = function () { if (songStarted) { songStarted = false; LK.stopMusic(); if (progressBar) { tween.stop(progressBar.bar, { width: true }); } if (runner) { runner.x = 1024; runner.y = 2000; runner.rotation = 0; runner.isReturningToInitial = false; runner.shouldStartIdleAfterReturn = false; runner.isPlayingIdleAnim = false; for (var i = 0; i < runner.frameAssets.length; i++) { runner.frameAssets[i].alpha = i === 0 ? 1 : 0; } for (var i = 0; i < runner.idleFrameAssets.length; i++) { runner.idleFrameAssets[i].alpha = 0; } } showMenu(); self.visible = false; } }; return self; }); var Note = Container.expand(function () { var self = Container.call(this); var noteGraphics = self.attachAsset('note', { anchorX: 0.5, anchorY: 0.5, alpha: 1 }); self.velocity = { x: 0, y: -5 }; self.lifetime = 800; self.spawnTime = Date.now(); self.noteType = 'note'; self.noteColor = 0xFFFFFF; self.setNoteType = function (type) { self.noteType = type; noteGraphics.destroy(); noteGraphics = self.attachAsset(type, { anchorX: 0.5, anchorY: 0.5, alpha: 1 }); noteGraphics.tint = self.noteColor; }; self.setColor = function (color) { self.noteColor = color; noteGraphics.tint = color; }; self.setVelocity = function (vx, vy) { self.velocity.x = vx; self.velocity.y = vy; }; self.update = function () { self.x += self.velocity.x; self.y += self.velocity.y; var elapsed = Date.now() - self.spawnTime; if (elapsed > self.lifetime) { self.alpha = Math.max(0, 1 - (elapsed - self.lifetime) / 500); } if (elapsed > self.lifetime + 500 || self.y < -100 || self.y > 2832 || self.x < -100 || self.x > 2148) { self.shouldDestroy = true; } }; return self; }); var NoteSparks = Container.expand(function () { var self = Container.call(this); self.notes = []; self.spawnRate = 500; self.lastSpawnTime = 0; self.spawnEnabled = false; self.spawnX = 1024; self.spawnY = 1366; self.spawnVelocityRange = { x: { min: -2, max: 2 }, y: { min: -8, max: -4 } }; self.noteColors = [0xFF073A, 0x39FF14, 0x00FFFF, 0xF3F315, 0xFF61F6]; self.setSpawnPosition = function (x, y) { self.spawnX = x; self.spawnY = y; }; self.setSpawnEnabled = function (enabled) { self.spawnEnabled = enabled; }; self.setSpawnRate = function (rate) { self.spawnRate = rate; }; self.spawnNote = function () { var note = new Note(); note.x = self.spawnX + (Math.random() - 0.5) * 50; note.y = self.spawnY; var vx = self.spawnVelocityRange.x.min + Math.random() * (self.spawnVelocityRange.x.max - self.spawnVelocityRange.x.min); var vy = self.spawnVelocityRange.y.min + Math.random() * (self.spawnVelocityRange.y.max - self.spawnVelocityRange.y.min); note.setVelocity(vx, vy); note.setNoteType(Math.random() > 0.5 ? 'note' : 'note2'); var color = self.noteColors[Math.floor(Math.random() * self.noteColors.length)]; note.setColor(color); note.rotation = (Math.random() - 0.5) * 0.5; self.notes.push(note); self.addChild(note); }; self.spawnBurst = function (count) { for (var i = 0; i < count; i++) { self.spawnNote(); } }; self.update = function () { var now = Date.now(); if (self.spawnEnabled && now - self.lastSpawnTime >= self.spawnRate) { self.spawnNote(); self.lastSpawnTime = now; } for (var i = self.notes.length - 1; i >= 0; i--) { var note = self.notes[i]; if (note.shouldDestroy) { note.destroy(); self.notes.splice(i, 1); } } }; return self; }); var Orb = Container.expand(function (special) { var self = Container.call(this); self.special = special; var frames = ['orb0', 'orb1', 'orb2', 'orb3', 'orb4', 'orb5']; var framesSpecial = ['orbSpe0', 'orbSpe1', 'orbSpe2', 'orbSpe3', 'orbSpe4', 'orbSpe5']; var currentFrames = frames; if (self.special) { currentFrames = framesSpecial; } var orbAssets = []; var currentFrameIndex = 0; var animationInterval = 100; var lastFrameTime = 0; self.directionAngle = 0; self.orbId = null; self.initialSize = 200; self.orbAngleOffsetRatio = 0.15; self.spawnTime = Date.now(); self.currentScale = 0.12; var glowGraphics = self.attachAsset('glow', { anchorX: 0.5, anchorY: 0.5, alpha: 0.8, width: self.initialSize * 1.5, height: self.initialSize * 1.5, blendMode: 1 }); self.boundingBox = self.attachAsset('boundingCircle', { anchorX: 0.5, anchorY: 0.5, width: self.initialSize * 0.5, height: self.initialSize * 0.5, alpha: 0 }); var _rotateGlow = function rotateGlow() { tween(glowGraphics, { rotation: glowGraphics.rotation + Math.PI * 2 }, { duration: 3000, easing: tween.linear, onFinish: _rotateGlow }); }; _rotateGlow(); var _pulseGlow = function pulseGlow() { tween(glowGraphics, { scaleX: 0.8, scaleY: 0.8 }, { duration: 500, easing: tween.easeInOut, onFinish: function onFinish() { tween(glowGraphics, { scaleX: 1.6, scaleY: 1.6 }, { duration: 500, easing: tween.easeInOut, onFinish: _pulseGlow }); } }); }; _pulseGlow(); for (var i = 0; i < currentFrames.length; i++) { var asset = self.attachAsset(currentFrames[i], { anchorX: 0.5, anchorY: 0.5, alpha: 0, width: self.initialSize, height: self.initialSize }); orbAssets.push(asset); } if (orbAssets.length > 0) { orbAssets[0].alpha = 1; } self.updateScale = function (newScale) { self.currentScale = newScale; for (var i = 0; i < orbAssets.length; i++) { orbAssets[i].scaleX = newScale; orbAssets[i].scaleY = newScale; if (i === currentFrameIndex) { orbAssets[i].alpha = Math.min(1, newScale + 0.66); } } var distance = (2450 - 1366) * newScale; var angle = self.directionAngle; if (angle != centerAngle) { angle += Math.sign(angle) * self.orbAngleOffsetRatio; } self.x = centerX + distance * Math.cos(angle + Math.PI * 0.5); if (self.special) { self.y = centerY + 128 - 0.6 * distance * Math.sin(angle + Math.PI * 0.5); } else { self.y = centerY + distance * Math.sin(angle + Math.PI * 0.5); } self.rotation = angle; }; self.update = function () { var now = Date.now(); if (now - lastFrameTime >= animationInterval) { var currentScale = orbAssets[0].scaleX; var targetAlpha = Math.min(1, currentScale + 0.66); tween(orbAssets[currentFrameIndex], { alpha: 0 }, { duration: animationInterval / 2 }); currentFrameIndex = (currentFrameIndex + 1) % currentFrames.length; tween(orbAssets[currentFrameIndex], { alpha: targetAlpha }, { duration: animationInterval / 2 }); lastFrameTime = now; } }; return self; }); var OrbManager = Container.expand(function () { var self = Container.call(this); self.orbs = []; self.orbSpawnInterval = 1000; self.lastOrbSpawnTime = 0; self.orbSpawnScale = 0.12; self.orbEndScale = 1.0; self.orbAnimationDuration = 2000; self.currentSpecialOrbsTimers = []; self.loadSpecialOrbsTimers = function () { console.log("loadSpecialOrbsTimers:", self.currentSpecialOrbsTimers); if (specialOrbsTimers && specialOrbsTimers[currentTrackIndex]) { self.currentSpecialOrbsTimers = specialOrbsTimers[currentTrackIndex]; } else { self.currentSpecialOrbsTimers = []; } console.log("loadSpecialOrbsTimers:", self.currentSpecialOrbsTimers); }; self.spawnOrb = function (angle, beatTime) { if (!beatTime) { return; } var isSpecial = beatTime && self.currentSpecialOrbsTimers && self.currentSpecialOrbsTimers[beatTime]; var orb = new Orb(isSpecial); orb.orbId = getNextGateId(); orb.directionAngle = angle || centerAngle; orb.spawnTime = Date.now(); orb.x = centerX; orb.y = centerY; orb.rotation = angle; // Check if beatTime matches a currentSpecialOrbsTimers if (isSpecial) { orb.y = centerY - 1024; if (isDebug) { orb.tint = 0x48ff7f; } // Show help jump when spawning first special orb if (helpIndicator && !jumpHelpShown) { helpIndicator.showHelpJump(); jumpHelpShown = true; // Set the flag to true after showing } } else { orb.updateScale(self.orbSpawnScale); } if (isDebug) { console.log("beatTime: " + beatTime); console.log("currentSpecialOrbsTimers:", self.currentSpecialOrbsTimers); if (orb.special) { console.log("SPECIAL !!! beatTime: " + beatTime); } } self.orbs.push(orb); self.addChild(orb); self.lastOrbSpawnTime = Date.now(); }; self.update = function () { if (!songStarted) { if (self.orbs.length > 0) { for (var i = self.orbs.length - 1; i >= 0; i--) { self.orbs[i].destroy(); } self.orbs = []; } return; } var now = Date.now(); if (now - self.lastOrbSpawnTime >= 600) { var hasPlannedSpawn = false; var beatTime; if (gateManager && gateManager.currentNoteIndex < gateManager.gateBeats.length) { var nextBeat = gateManager.gateBeats[gateManager.currentNoteIndex]; var songElapsed = now - gateManager.songStartTime; var timeToNextBeat = nextBeat.t - songElapsed; beatTime = timeToNextBeat / 2 + songElapsed; if (timeToNextBeat <= 300 && timeToNextBeat > 0) { hasPlannedSpawn = true; } } if (!hasPlannedSpawn) { self.spawnOrb(centerAngle, beatTime); self.lastOrbSpawnTime = now; } } for (var i = self.orbs.length - 1; i >= 0; i--) { var orb = self.orbs[i]; var currentScale = orb.currentScale; var newScale = currentScale + gateManager.gateAnimationSpeed * currentScale; if (newScale > 3.0) { orb.destroy(); self.orbs.splice(i, 1); } else { orb.updateScale(newScale); } } }; return self; }); var ProgressBar = Container.expand(function () { var self = Container.call(this); self.frame = self.attachAsset('progressFrame', { anchorX: 0.0, anchorY: 0.5, alpha: 0.8 }); self.bar = self.attachAsset('progressBar', { anchorX: 0.0, anchorY: 0.5, alpha: 0.8 }); self.bar.x = -0; self.setProgress = function (progress) { progress = Math.max(0, Math.min(1, progress)); self.bar.width = self.frame.width * progress; }; self.startProgressAnimation = function () { var songDuration = 0; if (gateManager && gateManager.currentSong && gateManager.currentSong.duration) { songDuration = gateManager.currentSong.duration; } if (songDuration > 0) { self.setProgress(0); tween(self.bar, { width: self.frame.width }, { duration: songDuration, easing: tween.linear }); } }; self.update = function () {}; self.setProgress(0); return self; }); var Runner = Container.expand(function () { var self = Container.call(this); var frameAssets = []; var currentFrameIndex = 0; var animationInterval = 2; var lastFrameTime = 0; for (var i = 1; i <= 12; i++) { var frameId = 'runnerDir4_' + (i < 10 ? '00' + i : '0' + i); var asset = self.attachAsset(frameId, { anchorX: 0.5, anchorY: 0.5, tint: 0xFFFFFF, alpha: 0 }); frameAssets.push(asset); } if (frameAssets.length > 0) { frameAssets[0].alpha = 1; } self.speedX = 0; self.speedY = 0; self.lastIntersectingGates = {}; self.tickCounter = 0; self.idleFrameAssets = []; var currentIdleFrameIndex = 0; var idleAnimationInterval = 100; var lastIdleFrameTime = 0; self.isPlayingIdleAnim = false; self.isReturningToInitial = false; self.shouldStartIdleAfterReturn = false; self.frameAssets = frameAssets; self.isPlayingWaitingAnim = false; self.currentWaitingFrameIndex = 0; self.lastWaitingFrameTime = 0; for (var i = 1; i <= 20; i++) { var idleFrameId = 'runnerIdleDir8' + (i < 10 ? '00' + i : '0' + i); var idleAsset = self.attachAsset(idleFrameId, { anchorX: 0.5, anchorY: 0.5, tint: 0xFFFFFF, alpha: 0 }); self.idleFrameAssets.push(idleAsset); } self.teleportAnim = function () { var beam = game.addChild(LK.getAsset('beam', { anchorX: 0.5, anchorY: 0.0, x: 1024, y: 0, alpha: 0, scaleY: 0 })); LK.getSound('beamEnter').play(); tween(beam, { alpha: 0.8, scaleY: 1.0 }, { duration: 800, easing: tween.easeIn, onFinish: function onFinish() { LK.getSound('beamTeleport').play(); tween(self, { y: -800, scaleX: 0.1, alpha: 0.3 }, { duration: 1200, easing: tween.easeInOut, onFinish: function onFinish() { tween(beam, { alpha: 0, scaleY: 0 }, { duration: 600, easing: tween.easeOut, onFinish: function onFinish() { beam.destroy(); showMenu(); } }); } }); } }); }; self.rotationAnim = function () { var rotationFrames = ['runnerRotation_01', 'runnerRotation_02', 'runnerRotation_03']; var rotationAssets = []; for (var i = 0; i < self.frameAssets.length; i++) { self.frameAssets[i].alpha = 0; } for (var i = 0; i < self.idleFrameAssets.length; i++) { self.idleFrameAssets[i].alpha = 0; } for (var i = 0; i < rotationFrames.length; i++) { var asset = self.attachAsset(rotationFrames[i], { anchorX: 0.5, anchorY: 0.5, tint: 0xFFFFFF, alpha: 0 }); rotationAssets.push(asset); } var frameIndex = 0; var frameInterval = 100; function showNextFrame() { if (frameIndex < rotationAssets.length) { if (frameIndex > 0) { rotationAssets[frameIndex - 1].alpha = 0; } rotationAssets[frameIndex].alpha = 1; frameIndex++; LK.setTimeout(showNextFrame, frameInterval); } else { rotationAssets[rotationAssets.length - 1].alpha = 0; for (var i = 0; i < rotationAssets.length; i++) { rotationAssets[i].alpha = 0; rotationAssets[i].destroy(); } for (var i = 0; i < self.idleFrameAssets.length; i++) { self.idleFrameAssets[i].alpha = 0; } if (self.idleFrameAssets.length > 0) {} self.idleAnim(); } } showNextFrame(); }; self.startIdleSequence = function () { for (var i = 0; i < self.frameAssets.length; i++) { self.frameAssets[i].alpha = 0; } self.rotationAnim(); }; self.idleAnim = function () { if (self.isPlayingIdleAnim) { return; } self.isPlayingIdleAnim = true; currentIdleFrameIndex = 0; lastIdleFrameTime = Date.now(); for (var i = 0; i < self.frameAssets.length; i++) { self.frameAssets[i].alpha = 0; } if (self.idleFrameAssets.length > 0) { self.idleFrameAssets[0].alpha = 1; } LK.setTimeout(function () { if (self.isPlayingIdleAnim) { self.teleportAnim(); } }, 2000); }; self.update = function () { if (self.isReturningToInitial) { for (var i = 0; i < self.idleFrameAssets.length; i++) { self.idleFrameAssets[i].alpha = 0; } if (self.frameAssets.length > 0) { if (self.frameAssets[currentFrameIndex].alpha === 0) { self.frameAssets[currentFrameIndex].alpha = 1; } } var now = Date.now(); if (now - lastFrameTime >= animationInterval) { self.frameAssets[currentFrameIndex].alpha = 0; currentFrameIndex = (currentFrameIndex + 1) % self.frameAssets.length; self.frameAssets[currentFrameIndex].alpha = 1; lastFrameTime = now; } var angle = Math.atan2(self.y - centerY, self.x - centerX); self.rotation = angle - Math.PI * 0.5; return; } if (!songStarted) { if (self.isPlayingWaitingAnim && self.idleFrameAssets && self.idleFrameAssets.length > 0) { var now_waiting = Date.now(); if (now_waiting - self.lastWaitingFrameTime >= idleAnimationInterval) { if (self.idleFrameAssets[self.currentWaitingFrameIndex]) { self.idleFrameAssets[self.currentWaitingFrameIndex].alpha = 0; } self.currentWaitingFrameIndex = (self.currentWaitingFrameIndex + 1) % self.idleFrameAssets.length; if (self.idleFrameAssets[self.currentWaitingFrameIndex]) { self.idleFrameAssets[self.currentWaitingFrameIndex].alpha = 1; } self.lastWaitingFrameTime = now_waiting; } } else if (self.isPlayingIdleAnim && self.idleFrameAssets && self.idleFrameAssets.length > 0) { // Post-song idle var now = Date.now(); if (now - lastIdleFrameTime >= idleAnimationInterval) { if (self.idleFrameAssets[currentIdleFrameIndex]) { self.idleFrameAssets[currentIdleFrameIndex].alpha = 0; } currentIdleFrameIndex = (currentIdleFrameIndex + 1) % self.idleFrameAssets.length; if (self.idleFrameAssets[currentIdleFrameIndex]) { self.idleFrameAssets[currentIdleFrameIndex].alpha = 1; } lastIdleFrameTime = now; } } return; // Song not started } // Song has started if (self.isPlayingWaitingAnim) { // Transition from waiting to running self.isPlayingWaitingAnim = false; if (globalWhistleInterval !== null) { LK.clearInterval(globalWhistleInterval); globalWhistleInterval = null; } if (self.idleFrameAssets && self.idleFrameAssets.length > 0 && self.idleFrameAssets[self.currentWaitingFrameIndex]) { self.idleFrameAssets[self.currentWaitingFrameIndex].alpha = 0; // Hide current waiting frame } // Setup for running animation currentFrameIndex = 0; if (self.frameAssets && self.frameAssets.length > 0 && frameAssets[0]) { // frameAssets is self.frameAssets frameAssets[0].alpha = 1; // Show first running frame } lastFrameTime = Date.now(); // Reset timer for running anim } if (self.isPlayingIdleAnim) { self.isPlayingIdleAnim = false; for (var i = 0; i < self.idleFrameAssets.length; i++) { self.idleFrameAssets[i].alpha = 0; } currentFrameIndex = 0; if (self.frameAssets.length > 0) { self.frameAssets[0].alpha = 1; } } var angle = Math.atan2(self.y - centerY, self.x - centerX); // Check if jumping by comparing distance from center var distanceFromCenter = Math.sqrt(Math.pow(self.x - centerX, 2) + Math.pow(self.y - centerY, 2)); var normalDistance = Math.sqrt(Math.pow(924, 2) + Math.pow(634, 2)); // Normal track radius if (distanceFromCenter > normalDistance * 1.2 || isJumping) { // During jump, maintain last rotation or use currentRotationAngle if (self.lastRotation !== undefined) { self.rotation = self.lastRotation; } else { self.rotation = currentRotationAngle; } } else { // Normal rotation when on track self.rotation = angle - Math.PI * 0.5; self.lastRotation = self.rotation; // Store last valid rotation } var now = Date.now(); if (now - lastFrameTime >= animationInterval) { self.frameAssets[currentFrameIndex].alpha = 0; currentFrameIndex = (currentFrameIndex + 1) % self.frameAssets.length; self.frameAssets[currentFrameIndex].alpha = 1; lastFrameTime = now; } }; if (!songStarted && self.idleFrameAssets && self.idleFrameAssets.length > 0) { self.isPlayingWaitingAnim = true; self.isPlayingIdleAnim = false; self.isReturningToInitial = false; self.currentWaitingFrameIndex = 0; self.lastWaitingFrameTime = Date.now(); // Ensure running frames are hidden for (var idx = 0; idx < self.frameAssets.length; idx++) { if (self.frameAssets[idx]) { self.frameAssets[idx].alpha = 0; } } // Set initial waiting animation frame for (var idx = 0; idx < self.idleFrameAssets.length; idx++) { if (self.idleFrameAssets[idx]) { self.idleFrameAssets[idx].alpha = idx === self.currentWaitingFrameIndex ? 1 : 0; } } whistleAnim(1024, 1800); } return self; }); var ScoreLabel = Container.expand(function () { var self = Container.call(this); self.scoreText = new Text2('0', { size: 160, fill: 0xFFFFFF }); self.scoreText.anchor.set(0.5, 0.5); self.addChild(self.scoreText); self.penaltyText = new Text2('-2', { size: 120, fill: 0xFF0000 }); self.penaltyText.anchor.set(-0.5, 0.5); self.penaltyText.y = 100; self.penaltyText.alpha = 0; self.addChild(self.penaltyText); self.updateScore = function (newScore) { self.scoreText.setText(newScore.toString()); tween(self, { scaleX: 1.3, scaleY: 1.3 }, { duration: 150, easing: tween.easeOut, onFinish: function onFinish() { tween(self, { scaleX: 1.0, scaleY: 1.0 }, { duration: 150, easing: tween.easeIn }); } }); }; self.showPenalty = function (penaltyValue) { penaltyValue = penaltyValue || -2; self.penaltyText.setText(penaltyValue.toString()); tween.stop(self.penaltyText, { alpha: true, y: true }); self.penaltyText.y = 150; self.penaltyText.alpha = 1; self.penaltyText.anchor.x = -0.5 + Math.random() * 2.0; tween(self.penaltyText, { alpha: 0, y: 50 }, { duration: 1000, easing: tween.easeOut }); }; return self; }); var SparkAnim = Container.expand(function () { var self = Container.call(this); var assetType = Math.random() > 0.5 ? 'note' : 'note2'; var glowGraphics = self.attachAsset(assetType, { anchorX: 0.5, anchorY: 0.5, alpha: 1.0, scaleX: 1, scaleY: 1, tint: 0x32cbec }); self.lifetime = 1500; self.spawnTime = Date.now(); var initialVelocity = -200; var acceleration = -2000; var deltaTime = 16; var velocity = initialVelocity; self.update = function () { velocity += acceleration * (deltaTime / 1000); glowGraphics.y += velocity * (deltaTime / 1000); var elapsed = Date.now() - self.spawnTime; if (elapsed >= self.lifetime) { self.destroy(); } }; tween(glowGraphics, { alpha: 0 }, { duration: self.lifetime, easing: tween.easeOut }); return self; }); var Speaker = Container.expand(function () { var self = Container.call(this); var speakerGraphics = self.attachAsset('speaker', { anchorX: 0.5, anchorY: 0.5, alpha: 1 }); self.volume = 1.0; self.isPlaying = false; self.setVolume = function (vol) { self.volume = Math.max(0, Math.min(1, vol)); }; self.toggleState = function () { self.isPlaying = !self.isPlaying; speakerGraphics.alpha = self.isPlaying ? 1.0 : 0.5; }; return self; }); var SpeakerManager = Container.expand(function () { var self = Container.call(this); self.speakers = []; self.lastBeatTime = 0; self.beatCooldown = 200; self.speakerSongData = songListV4[0]; self.speakerBeats = filterSpeakerData(0); self.currentBeatIndex = 0; self.songStartTime = 0; var speakerPositions = [{ x: 1024 - 500, y: 512 }, { x: 1024, y: 512 }, { x: 1024 + 500, y: 512 }]; self.initializeSpeakers = function () { for (var i = 0; i < 3; i++) { var speaker = new Speaker(); var finalX = speakerPositions[i].x; var finalY = speakerPositions[i].y; if (i === 0) { speaker.x = finalX - 800; speaker.y = finalY; } else if (i === 1) { speaker.x = finalX; speaker.y = finalY - 800; } else { speaker.x = finalX + 800; speaker.y = finalY; } speaker.scaleX = 0.8; speaker.scaleY = 0.8; speaker.isBigBumping = false; self.speakers.push(speaker); self.addChild(speaker); var delay; if (i === 0 || i === 2) { delay = 0; } else { delay = 300; } LK.setTimeout(function (spkr, targetX, targetY) { return function () { tween(spkr, { x: targetX, y: targetY }, { duration: 800, easing: tween.easeOut }); }; }(speaker, finalX, finalY), delay); } }; self.onBeat = function (beatValue) { var now = Date.now(); if (now - self.lastBeatTime >= self.beatCooldown) { var speakerIndex = -1; if (beatValue === "1") { speakerIndex = 1; } else if (beatValue === "2") { speakerIndex = 2; } else { speakerIndex = 0; } if (speakerIndex >= 0 && speakerIndex < self.speakers.length) { var mainSpeaker = self.speakers[speakerIndex]; mainSpeaker.isBigBumping = true; self.spawnNoteSparks(mainSpeaker); tween(mainSpeaker, { scaleX: 1.2, scaleY: 1.2 }, { duration: 100, easing: tween.easeOut, onFinish: function onFinish() { tween(mainSpeaker, { scaleX: 0.8, scaleY: 0.8 }, { duration: 200, easing: tween.easeIn, onFinish: function onFinish() { mainSpeaker.isBigBumping = false; } }); } }); } self.lastBeatTime = now; } }; self.update = function () { if (songStarted) { if (self.speakers.length === 0) { self.initializeSpeakers(); } for (var i = 0; i < self.speakers.length; i++) { var speaker = self.speakers[i]; var time = Date.now() * 0.003; var twistAngle = Math.sin(time + i * 0.5) * 0.15; speaker.rotation = twistAngle; if (!speaker.isBigBumping) { var scaleValue = 0.8 + Math.sin(time * 2 + i * 0.3) * 0.05; speaker.scaleX = scaleValue; speaker.scaleY = scaleValue; var dancingOffset = Math.sin(time * 3 + i * 0.7) * 10; speaker.y = speakerPositions[i].y + dancingOffset; } } } if (!songStarted) { return; } var now = Date.now(); var songElapsed = now - self.songStartTime; if (self.currentBeatIndex < self.speakerBeats.length) { var nextBeat = self.speakerBeats[self.currentBeatIndex]; if (songElapsed >= nextBeat.t) { self.onBeat(nextBeat.s); self.currentBeatIndex++; } } if (self.currentBeatIndex >= self.speakerBeats.length && self.speakerBeats.length > 0) { var lastBeat = self.speakerBeats[self.speakerBeats.length - 1]; if (songElapsed > lastBeat.t + 5000) { self.songStartTime = Date.now(); self.currentBeatIndex = 0; } } }; self.spawnNoteSparks = function (speaker) { var noteCount = 3 + Math.floor(Math.random() * 3); for (var i = 0; i < noteCount; i++) { var note = new Note(); var angle = Math.random() * Math.PI * 2; var distance = 50 + Math.random() * 100; note.x = speaker.x + Math.cos(angle) * distance; note.y = speaker.y + Math.sin(angle) * distance; var speed = 3 + Math.random() * 5; note.setVelocity(Math.cos(angle) * speed, Math.sin(angle) * speed - 2); note.setNoteType(Math.random() > 0.5 ? 'note' : 'note2'); var futuristicColors = [0x32cbec]; var color = futuristicColors[Math.floor(Math.random() * futuristicColors.length)]; note.setColor(color); note.rotation = (Math.random() - 0.5) * 0.5; note.scaleX = 0.5; note.scaleY = 0.5; if (noteSparks) { noteSparks.notes.push(note); noteSparks.addChild(note); } } }; return self; }); var StartButton = Container.expand(function () { var self = Container.call(this); self.buttonBg = self.attachAsset('start', { anchorX: 0.5, anchorY: 0.5, alpha: 0 }); self.buttonPulse = self.attachAsset('start2', { anchorX: 0.5, anchorY: 0.5, alpha: 1 }); self.buttonLoading = self.attachAsset('startLoading', { anchorX: 0.5, anchorY: 0.5, alpha: 1 }); self.x = centerX; self.y = centerY; // Start with scale 0 and animate to 1 over 3 seconds self.scaleX = 0; self.scaleY = 0; self.isEntranceComplete = false; // Pulse animation for buttonPulse var _pulse = function pulse() { tween(self.buttonBg, { scaleX: 1.0, scaleY: 1.0, alpha: 1.0 }, { duration: 1200, easing: tween.easeOut, onFinish: function onFinish() { tween(self.buttonBg, { scaleX: 0.9, scaleY: 0.9, alpha: 0.8 }, { duration: 1200, easing: tween.easeIn, onFinish: _pulse }); } }); }; tween(self.buttonLoading, { rotation: Math.PI * 4 }, { duration: 3000, easing: tween.easeOut }); tween(self, { scaleX: 1, scaleY: 1 }, { duration: 3000, easing: tween.easeOut, onFinish: function onFinish() { self.buttonBg.alpha = 1; self.buttonPulse.alpha = 0; self.buttonLoading.alpha = 0; self.isEntranceComplete = true; _pulse(); } }); // Start the pulse animation self.down = function () { if (songStarted) { return; } // Prevent clicking until entrance animation is complete if (!self.isEntranceComplete) { return; } // If track01 has been finished, show menu instead of starting a song LK.setScore(0); storage.score = 0; // Persist current score as 0 if (game.updateScore) { game.updateScore(); } if (hasFinishedTrack01) { // Stop the pulse animation when pressed tween.stop(self.buttonBg); tween(self, { alpha: 0 }, { duration: 500, easing: tween.easeOut, onFinish: function onFinish() { self.destroy(); showMenu(); } }); return; } // Stop the pulse animation when pressed tween.stop(self.buttonBg); tween(self, { alpha: 0 }, { duration: 500, easing: tween.easeOut, onFinish: function onFinish() { var songStartTime = Date.now(); if (isDebug) { LK.playMusic('track_test'); } else { LK.playMusic('track_01'); } songStarted = true; if (gateManager) { //gateManager.songStartTime = songStartTime; //gateManager.currentBeatIndex = 0; gateManager.resetSong(); } if (speakerManager) { speakerManager.songStartTime = songStartTime; speakerManager.currentBeatIndex = 0; } if (orbManager) { orbManager.loadSpecialOrbsTimers(); } if (menuIcon && hasFinishedTrack01) { menuIcon.visible = true; } if (scoreLabel) { scoreLabel.visible = true; } if (speakerManager && speakerManager.speakers) { for (var i = 0; i < speakerManager.speakers.length; i++) { speakerManager.speakers[i].visible = true; } } if (progressBar) { progressBar.visible = true; progressBar.startProgressAnimation(); } self.destroy(); } }); }; return self; }); var WhistleParticle = Container.expand(function (startX, startY, assetId) { var self = Container.call(this); self.x = startX + (Math.random() - 0.5) * 40; // Initial horizontal spread self.y = startY; self.shouldDestroy = false; var graphicScale = 0.15 + Math.random() * 0.1; // Make them small: 0.15 to 0.25 var graphic = self.attachAsset(assetId, { anchorX: 0.5, anchorY: 0.5, tint: 0x000000, // Black tint as requested scaleX: graphicScale, scaleY: graphicScale, alpha: 0.85 // Start slightly transparent }); graphic.rotation = (Math.random() - 0.5) * (Math.PI / 6); // Initial slight random rotation (up to +/- 30 deg) var swingUpDuration = 5000 + Math.random() * 400; // Duration of upward movement: 0.8s to 1.2s var evaporateDuration = 1000 + Math.random() * 200; // Duration of fade out: 0.4s to 0.6s // Swing Up Animation: // Moves upwards, rotates for a "swing" effect. tween(self, { y: self.y - (2000 + Math.random() * 250), // Move up by 120-180px rotation: self.rotation + (Math.random() - 0.5) * (Math.PI / 2) // Swing rotation up to +/- 45 deg from initial }, { duration: swingUpDuration, easing: tween.easeOutCubic // Smoothly decelerates }); // Evaporate Animation: // Fades out the particle after the swing up animation. tween(self, { alpha: 0 }, { duration: evaporateDuration, delay: swingUpDuration, // Start fading after upward motion is complete easing: tween.easeInQuad, // Smoothly accelerates fade, making it "evaporate" onFinish: function onFinish() { self.shouldDestroy = true; // Flag for cleanup in game.update } }); return self; }); var WorldManager = Container.expand(function () { var self = Container.call(this); var assetWidth = 2732; var screenWidth = 2048; var totalContentWidth = assetWidth * 2; self.x_center_view = -(totalContentWidth / 2 - screenWidth / 2); self.shiftAmplitude = 1024; self.shiftDurationOneWay = 15000; self._isShifting = false; self._animateToRandomTarget = function () { if (!songStarted || !self._isShifting) { self._isShifting = false; tween.stop(self, { x: true }); return; } var minTargetX = self.x_center_view - self.shiftAmplitude; var maxTargetX = self.x_center_view + self.shiftAmplitude; var randomTargetX = minTargetX + Math.random() * (maxTargetX - minTargetX); var currentX = self.x; var distanceToTravel = Math.abs(currentX - randomTargetX); if (distanceToTravel < 50) { LK.setTimeout(self._animateToRandomTarget, 0); return; } var speed = self.shiftAmplitude / self.shiftDurationOneWay; if (speed <= 0) { speed = (self.shiftAmplitude > 0 ? self.shiftAmplitude : 1024) / 15000; if (speed <= 0) { speed = 0.05; } } var dynamicDuration = distanceToTravel / speed; dynamicDuration = Math.max(500, Math.min(dynamicDuration, self.shiftDurationOneWay * 2)); tween(self, { x: randomTargetX }, { duration: dynamicDuration, easing: tween.easeInOut, onFinish: self._animateToRandomTarget }); }; self._initiateShift = function () { if (self._isShifting) { return; } self._isShifting = true; self._animateToRandomTarget(); }; self.update = function () { if (songStarted && !self._isShifting) { self._initiateShift(); } else if (!songStarted && self._isShifting) { self._isShifting = false; tween.stop(self, { x: true }); } }; self.loadWorldAssets = function (trackIndex) { var worldAssets = ['world01', 'world02', 'world03']; var worldAsset = worldAssets[trackIndex] || 'world01'; if (self.bgLeft) { self.bgLeft.destroy(); } if (self.bgRight) { self.bgRight.destroy(); } self.bgLeft = self.attachAsset(worldAsset, { anchorX: 0.5, anchorY: 0.5, x: assetWidth / 2, y: centerY, scaleX: 1.0, scaleY: 1.0 }); self.bgRight = self.attachAsset(worldAsset, { anchorX: 0.5, anchorY: 0.5, x: assetWidth / 2 + assetWidth, y: centerY, scaleX: -1.0, scaleY: 1.0 }); }; self.x = self.x_center_view; self.y = 0; self.bgLeft = self.attachAsset('world01', { anchorX: 0.5, anchorY: 0.5, x: assetWidth / 2, y: centerY, scaleX: 1.0, scaleY: 1.0 }); self.bgRight = self.attachAsset('world01', { anchorX: 0.5, anchorY: 0.5, x: assetWidth / 2 + assetWidth, y: centerY, scaleX: -1.0, scaleY: 1.0 }); return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x000c33 }); /**** * Game Code ****/ var centerX = 1024; var centerY = 1366; var neonColors = [0x39FF14, 0xFF073A, 0x00FFFF, 0xF3F315, 0xFF61F6, 0xFF9900]; var currentColor = neonColors[Math.floor(Math.random() * neonColors.length)]; function drawPolygon(coordinates, tint) { log("drawPolygon ", coordinates); var lines = []; for (var i = 0; i < coordinates.length; i++) { var startPoint = coordinates[i]; var endPoint = coordinates[(i + 1) % coordinates.length]; var line = drawLine(startPoint.x, startPoint.y, endPoint.x, endPoint.y, tint); lines.push(line); } return lines; } function updatePolygon(lines, newCoordinates, scale) { log("updatePolygon ", lines, scale); if (lines.length !== newCoordinates.length) { error("updatePolygon error: lines and newCoordinates length mismatch"); return lines; } for (var i = 0; i < lines.length; i++) { var startPoint = newCoordinates[i]; var endPoint = newCoordinates[(i + 1) % newCoordinates.length]; updateLine(lines[i], startPoint.x, startPoint.y, endPoint.x, endPoint.y, scale); } return lines; } function drawLine(x1, y1, x2, y2, tint) { log("drawLine ", x1, y1); var line = LK.getAsset('line', { anchorX: 0.0, anchorY: 0.0, x: x1, y: y1, tint: tint }); line.startX = x1; line.startY = y1; line.endX = x2; line.endY = y2; var distance = Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2)); line.width = distance; var angle = Math.atan2(y2 - y1, x2 - x1); line.rotation = angle; return line; } function updateLine(line, newX1, newY1, newX2, newY2, scale) { log("updateLine ", line); scale = scale === undefined ? 1 : scale; var midX = (newX1 + newX2) / 2; var midY = (newY1 + newY2) / 2; newX1 = midX + (newX1 - midX) * scale; newY1 = midY + (newY1 - midY) * scale; newX2 = midX + (newX2 - midX) * scale; newY2 = midY + (newY2 - midY) * scale; line.x = newX1; line.y = newY1; line.startX = newX1; line.startY = newY1; line.endX = newX2; line.endY = newY2; var distance = Math.sqrt(Math.pow(newX2 - newX1, 2) + Math.pow(newY2 - newY1, 2)); line.width = distance; var angle = Math.atan2(newY2 - newY1, newX2 - newX1); line.rotation = angle; return line; } function log() { if (isDebug) { console.log(arguments); } } var songTracks = ["track_01", "track_02", "track_03"]; var songListV4 = [{ "name": "Words Fly Fast", "duration": 157240, "songBeats": [{ "t": 128, "s": "1" }, { "t": 443, "s": "1" }, { "t": 747, "s": "1" }, { "t": 1232, "s": "1" }, { "t": 1579, "s": "1" }, { "t": 1800, "b": "1" }, { "t": 1893, "s": "1" }, { "t": 2224, "s": "1" }, { "t": 2364, "b": "1" }, { "t": 2549, "s": "1" }, { "t": 2828, "b": "1" }, { "t": 2853, "s": "1" }, { "t": 3269, "s": "1" }, { "t": 3324, "b": "1" }, { "t": 3708, "b": "1" }, { "t": 3712, "s": "1" }, { "t": 4037, "s": "1" }, { "t": 4192, "b": "2" }, { "t": 4352, "s": "1" }, { "t": 4661, "s": "1" }, { "t": 4804, "b": "2" }, { "t": 5072, "s": "1" }, { "t": 5320, "b": "2" }, { "t": 5392, "s": "1" }, { "t": 5728, "s": "1" }, { "t": 5796, "b": "2" }, { "t": 6176, "s": "1" }, { "t": 6240, "b": "2" }, { "t": 6587, "s": "1" }, { "t": 6692, "b": "2" }, { "t": 7141, "s": "1" }, { "t": 7176, "b": "2" }, { "t": 7541, "s": "1" }, { "t": 7640, "b": "2" }, { "t": 7856, "s": "1" }, { "t": 8092, "b": "1" }, { "t": 8171, "s": "3" }, { "t": 8501, "s": "2" }, { "t": 8576, "b": "2" }, { "t": 8816, "s": "2" }, { "t": 9120, "s": "3" }, { "t": 9124, "b": "1" }, { "t": 9424, "s": "2" }, { "t": 9580, "b": "2" }, { "t": 9728, "s": "2" }, { "t": 10032, "s": "3" }, { "t": 10084, "b": "1" }, { "t": 10347, "s": "2" }, { "t": 10548, "b": "2" }, { "t": 10651, "s": "1" }, { "t": 10971, "s": "2" }, { "t": 11072, "b": "1" }, { "t": 11275, "s": "2" }, { "t": 11556, "b": "2" }, { "t": 11600, "s": "2" }, { "t": 11915, "s": "1" }, { "t": 12092, "b": "1" }, { "t": 12240, "s": "2" }, { "t": 12560, "s": "3" }, { "t": 12564, "b": "2" }, { "t": 12875, "s": "2" }, { "t": 13008, "b": "1" }, { "t": 13184, "s": "3" }, { "t": 13400, "b": "2" }, { "t": 13493, "s": "2" }, { "t": 13813, "s": "3" }, { "t": 13916, "b": "1" }, { "t": 14176, "s": "3" }, { "t": 14460, "b": "2" }, { "t": 14517, "s": "1" }, { "t": 14843, "s": "2" }, { "t": 14944, "b": "1" }, { "t": 15147, "s": "2" }, { "t": 15360, "b": "2" }, { "t": 15472, "s": "3" }, { "t": 15781, "s": "2" }, { "t": 16112, "s": "2" }, { "t": 16432, "s": "2" }, { "t": 16741, "s": "2" }, { "t": 17056, "s": "3" }, { "t": 17340, "b": "1" }, { "t": 17360, "s": "3" }, { "t": 17685, "s": "2" }, { "t": 17995, "s": "3" }, { "t": 18260, "b": "2" }, { "t": 18299, "s": "3" }, { "t": 18608, "s": "3" }, { "t": 18917, "s": "3" }, { "t": 19196, "b": "1" }, { "t": 19232, "s": "1" }, { "t": 19547, "s": "2" }, { "t": 19851, "s": "3" }, { "t": 20064, "b": "2" }, { "t": 20171, "s": "1" }, { "t": 20475, "s": "3" }, { "t": 20805, "s": "3" }, { "t": 21092, "b": "1" }, { "t": 21120, "s": "1" }, { "t": 21435, "s": "2" }, { "t": 21749, "s": "2" }, { "t": 22059, "s": "2" }, { "t": 22072, "b": "2" }, { "t": 22373, "s": "2" }, { "t": 22699, "s": "2" }, { "t": 23019, "s": "1" }, { "t": 23100, "b": "1" }, { "t": 23323, "s": "3" }, { "t": 23627, "s": "3" }, { "t": 23931, "s": "2" }, { "t": 24040, "b": "2" }, { "t": 24240, "s": "2" }, { "t": 24549, "s": "2" }, { "t": 24869, "s": "2" }, { "t": 24988, "b": "1" }, { "t": 25189, "s": "3" }, { "t": 25493, "s": "2" }, { "t": 25819, "s": "2" }, { "t": 25884, "b": "2" }, { "t": 26133, "s": "1" }, { "t": 26437, "s": "2" }, { "t": 26757, "s": "2" }, { "t": 26876, "b": "1" }, { "t": 27061, "s": "2" }, { "t": 27365, "s": "2" }, { "t": 27669, "s": "3" }, { "t": 27892, "b": "2" }, { "t": 27973, "s": "3" }, { "t": 28277, "s": "3" }, { "t": 28581, "s": "3" }, { "t": 28820, "b": "1" }, { "t": 28885, "s": "3" }, { "t": 29221, "s": "2" }, { "t": 29557, "s": "3" }, { "t": 29688, "b": "2" }, { "t": 29861, "s": "2" }, { "t": 30197, "s": "2" }, { "t": 30507, "s": "2" }, { "t": 30728, "b": "1" }, { "t": 30827, "s": "2" }, { "t": 31141, "s": "2" }, { "t": 31483, "s": "2" }, { "t": 31696, "b": "2" }, { "t": 31787, "s": "2" }, { "t": 32091, "s": "3" }, { "t": 32395, "s": "3" }, { "t": 32656, "b": "1" }, { "t": 32731, "s": "1" }, { "t": 33045, "s": "2" }, { "t": 33349, "s": "3" }, { "t": 33624, "b": "2" }, { "t": 33653, "s": "2" }, { "t": 33957, "s": "3" }, { "t": 34261, "s": "2" }, { "t": 34576, "s": "2" }, { "t": 34673, "b": "1" }, { "t": 34901, "s": "2" }, { "t": 35211, "s": "3" }, { "t": 35520, "s": "2" }, { "t": 35692, "b": "2" }, { "t": 35829, "s": "3" }, { "t": 36149, "s": "3" }, { "t": 36464, "s": "2" }, { "t": 36628, "b": "1" }, { "t": 36779, "s": "3" }, { "t": 37083, "s": "2" }, { "t": 37403, "s": "2" }, { "t": 37536, "b": "2" }, { "t": 37707, "s": "2" }, { "t": 38037, "s": "2" }, { "t": 38341, "s": "3" }, { "t": 38516, "b": "1" }, { "t": 38661, "s": "2" }, { "t": 38976, "s": "1" }, { "t": 39301, "s": "1" }, { "t": 39372, "b": "2" }, { "t": 39611, "s": "2" }, { "t": 39941, "s": "2" }, { "t": 40256, "s": "1" }, { "t": 40524, "b": "1" }, { "t": 40565, "s": "2" }, { "t": 40885, "s": "1" }, { "t": 41028, "b": "1" }, { "t": 41189, "s": "1" }, { "t": 41499, "s": "1" }, { "t": 41851, "s": "1", "b": "3" }, { "t": 42155, "s": "1", "b": "3" }, { "t": 42459, "s": "1" }, { "t": 42976, "s": "1" }, { "t": 43080, "b": "2" }, { "t": 43429, "s": "1" }, { "t": 43564, "b": "2" }, { "t": 43733, "s": "1" }, { "t": 44043, "s": "1" }, { "t": 44357, "s": "2" }, { "t": 44400, "b": "1" }, { "t": 44672, "s": "2" }, { "t": 44948, "b": "1" }, { "t": 44987, "s": "1" }, { "t": 45312, "s": "1" }, { "t": 45744, "s": "1" }, { "t": 46059, "s": "1" }, { "t": 46373, "s": "1" }, { "t": 46683, "s": "2" }, { "t": 46888, "b": "2" }, { "t": 46992, "s": "2" }, { "t": 47301, "s": "1" }, { "t": 47412, "b": "2" }, { "t": 47605, "s": "2" }, { "t": 47920, "s": "2" }, { "t": 48229, "s": "1" }, { "t": 48260, "b": "1" }, { "t": 48544, "s": "2" }, { "t": 48818, "b": "1" }, { "t": 48859, "s": "1" }, { "t": 49168, "s": "1" }, { "t": 49477, "s": "2" }, { "t": 49845, "s": "1" }, { "t": 50160, "s": "1" }, { "t": 50496, "s": "2" }, { "t": 50805, "s": "1" }, { "t": 50816, "b": "2" }, { "t": 51173, "s": "1" }, { "t": 51477, "s": "2" }, { "t": 51524, "b": "2" }, { "t": 51792, "s": "2" }, { "t": 52107, "s": "2" }, { "t": 52168, "b": "1" }, { "t": 52421, "s": "1" }, { "t": 52684, "b": "1" }, { "t": 52869, "s": "1" }, { "t": 53189, "s": "1" }, { "t": 53595, "s": "1" }, { "t": 53979, "s": "1" }, { "t": 54288, "s": "1" }, { "t": 54540, "b": "3" }, { "t": 54597, "s": "3" }, { "t": 54907, "s": "2" }, { "t": 55227, "s": "3" }, { "t": 55488, "b": "3" }, { "t": 55531, "s": "3" }, { "t": 55851, "s": "2" }, { "t": 56165, "s": "3" }, { "t": 56448, "b": "3" }, { "t": 56475, "s": "3" }, { "t": 56789, "s": "2" }, { "t": 57104, "s": "2" }, { "t": 57408, "s": "1" }, { "t": 57436, "b": "3" }, { "t": 57728, "s": "3" }, { "t": 58053, "s": "2" }, { "t": 58363, "s": "1" }, { "t": 58412, "b": "1" }, { "t": 58667, "s": "3" }, { "t": 58976, "s": "3" }, { "t": 59240, "b": "2" }, { "t": 59307, "s": "1" }, { "t": 59621, "s": "3" }, { "t": 59947, "s": "3" }, { "t": 59988, "b": "1" }, { "t": 60304, "s": "2" }, { "t": 60608, "s": "3" }, { "t": 60808, "b": "2" }, { "t": 60971, "s": "1" }, { "t": 61339, "s": "2" }, { "t": 61636, "b": "1" }, { "t": 61701, "s": "1" }, { "t": 62032, "s": "1" }, { "t": 62336, "s": "3" }, { "t": 62640, "s": "3" }, { "t": 62955, "s": "3" }, { "t": 63269, "s": "3" }, { "t": 63584, "s": "2" }, { "t": 63800, "b": "1" }, { "t": 63904, "s": "3" }, { "t": 64213, "s": "3" }, { "t": 64555, "s": "2" }, { "t": 64688, "b": "2" }, { "t": 64864, "s": "3" }, { "t": 65179, "s": "2" }, { "t": 65499, "s": "2" }, { "t": 65656, "b": "1" }, { "t": 65824, "s": "3" }, { "t": 66144, "s": "2" }, { "t": 66464, "s": "2" }, { "t": 66544, "b": "2" }, { "t": 66768, "s": "3" }, { "t": 67093, "s": "1" }, { "t": 67403, "s": "3" }, { "t": 67492, "b": "1" }, { "t": 67707, "s": "3" }, { "t": 68053, "s": "2" }, { "t": 68368, "s": "2" }, { "t": 68432, "b": "2" }, { "t": 68709, "s": "1" }, { "t": 69024, "s": "1" }, { "t": 69333, "s": "2" }, { "t": 69369, "b": "1" }, { "t": 69648, "s": "3" }, { "t": 69968, "s": "2" }, { "t": 70283, "s": "2" }, { "t": 70336, "b": "2" }, { "t": 70587, "s": "3" }, { "t": 70896, "s": "3" }, { "t": 71205, "s": "3" }, { "t": 71416, "b": "1" }, { "t": 71525, "s": "3" }, { "t": 71835, "s": "3" }, { "t": 72139, "s": "3" }, { "t": 72324, "b": "2" }, { "t": 72448, "s": "3" }, { "t": 72779, "s": "3" }, { "t": 73083, "s": "2" }, { "t": 73387, "s": "3" }, { "t": 73408, "b": "1" }, { "t": 73691, "s": "1" }, { "t": 74016, "s": "3" }, { "t": 74316, "b": "2" }, { "t": 74336, "s": "2" }, { "t": 74667, "s": "3" }, { "t": 74987, "s": "3" }, { "t": 75276, "b": "1" }, { "t": 75296, "s": "1" }, { "t": 75605, "s": "3" }, { "t": 75915, "s": "3" }, { "t": 76204, "b": "2" }, { "t": 76224, "s": "3" }, { "t": 76549, "s": "3" }, { "t": 76853, "s": "3" }, { "t": 77157, "s": "3" }, { "t": 77248, "b": "2" }, { "t": 77461, "s": "3" }, { "t": 77776, "s": "1" }, { "t": 78107, "s": "2" }, { "t": 78232, "b": "1" }, { "t": 78421, "s": "2" }, { "t": 78731, "s": "2" }, { "t": 79045, "s": "2" }, { "t": 79168, "b": "2" }, { "t": 79365, "s": "2" }, { "t": 79669, "s": "1" }, { "t": 79995, "s": "1" }, { "t": 80309, "s": "1" }, { "t": 80640, "s": "1" }, { "t": 80965, "s": "1" }, { "t": 81048, "b": "1" }, { "t": 81296, "s": "1" }, { "t": 81856, "s": "1" }, { "t": 81996, "b": "2" }, { "t": 82165, "s": "2" }, { "t": 82491, "s": "2" }, { "t": 82827, "s": "2" }, { "t": 83096, "b": "1" }, { "t": 83136, "s": "2" }, { "t": 83451, "s": "2" }, { "t": 83765, "s": "1" }, { "t": 84064, "b": "2" }, { "t": 84080, "s": "1" }, { "t": 84389, "s": "1" }, { "t": 84704, "s": "1" }, { "t": 85040, "b": "1" }, { "t": 85040, "s": "1" }, { "t": 85392, "s": "2" }, { "t": 85696, "s": "1" }, { "t": 86008, "b": "2" }, { "t": 86016, "s": "1" }, { "t": 86325, "s": "1" }, { "t": 86688, "s": "1" }, { "t": 86956, "b": "1" }, { "t": 87019, "s": "2" }, { "t": 87323, "s": "2" }, { "t": 87643, "s": "1" }, { "t": 87947, "s": "1" }, { "t": 87976, "b": "2" }, { "t": 88272, "s": "1" }, { "t": 88587, "s": "1" }, { "t": 88832, "b": "1" }, { "t": 88901, "s": "1" }, { "t": 89216, "s": "1" }, { "t": 89520, "s": "1" }, { "t": 89844, "b": "2" }, { "t": 89872, "s": "1" }, { "t": 90176, "s": "2" }, { "t": 90485, "s": "2" }, { "t": 90800, "s": "2" }, { "t": 90832, "b": "1" }, { "t": 91115, "s": "1" }, { "t": 91424, "s": "1" }, { "t": 91819, "s": "1" }, { "t": 92304, "s": "1" }, { "t": 92667, "s": "1" }, { "t": 92672, "b": "3" }, { "t": 92992, "s": "2" }, { "t": 93156, "b": "3" }, { "t": 93301, "s": "3" }, { "t": 93659, "s": "1" }, { "t": 93720, "b": "3" }, { "t": 93968, "s": "3" }, { "t": 94272, "s": "3" }, { "t": 94329, "b": "3" }, { "t": 94581, "s": "2" }, { "t": 94812, "b": "3" }, { "t": 94885, "s": "3" }, { "t": 95205, "s": "3" }, { "t": 95256, "b": "3" }, { "t": 95525, "s": "2" }, { "t": 95720, "b": "1" }, { "t": 95845, "s": "3" }, { "t": 96155, "s": "1" }, { "t": 96485, "s": "2" }, { "t": 96496, "b": "2" }, { "t": 96811, "s": "3" }, { "t": 97125, "s": "3" }, { "t": 97451, "s": "2" }, { "t": 97556, "b": "3" }, { "t": 97755, "s": "3" }, { "t": 98069, "s": "3" }, { "t": 98112, "b": "3" }, { "t": 98411, "s": "2" }, { "t": 98624, "b": "3" }, { "t": 98725, "s": "3" }, { "t": 99035, "s": "3" }, { "t": 99100, "b": "3" }, { "t": 99349, "s": "3" }, { "t": 99604, "b": "1" }, { "t": 99680, "s": "1" }, { "t": 100000, "s": "2" }, { "t": 100304, "s": "3" }, { "t": 100440, "b": "2" }, { "t": 100624, "s": "3" }, { "t": 100928, "s": "3" }, { "t": 101232, "s": "3" }, { "t": 101420, "b": "1" }, { "t": 101557, "s": "3" }, { "t": 101888, "s": "2" }, { "t": 102192, "s": "3" }, { "t": 102388, "b": "2" }, { "t": 102507, "s": "3" }, { "t": 102853, "s": "3" }, { "t": 103157, "s": "3" }, { "t": 103336, "b": "1" }, { "t": 103461, "s": "3" }, { "t": 103765, "s": "2" }, { "t": 104085, "s": "1" }, { "t": 104324, "b": "2" }, { "t": 104395, "s": "1" }, { "t": 104709, "s": "2" }, { "t": 105013, "s": "3" }, { "t": 105172, "b": "1" }, { "t": 105317, "s": "2" }, { "t": 105627, "s": "1" }, { "t": 105931, "s": "3" }, { "t": 106240, "s": "2" }, { "t": 106260, "b": "3" }, { "t": 106555, "s": "3" }, { "t": 106836, "b": "3" }, { "t": 106864, "s": "3" }, { "t": 107168, "s": "3" }, { "t": 107392, "b": "3" }, { "t": 107472, "s": "1" }, { "t": 107781, "s": "2" }, { "t": 108028, "b": "2" }, { "t": 108091, "s": "3" }, { "t": 108416, "s": "2" }, { "t": 108692, "b": "1" }, { "t": 108731, "s": "2" }, { "t": 109045, "s": "2" }, { "t": 109349, "s": "3" }, { "t": 109540, "b": "2" }, { "t": 109669, "s": "2" }, { "t": 109979, "s": "2" }, { "t": 110293, "s": "3" }, { "t": 110488, "b": "1" }, { "t": 110597, "s": "3" }, { "t": 110917, "s": "3" }, { "t": 111221, "s": "3" }, { "t": 111525, "s": "3" }, { "t": 111840, "s": "2" }, { "t": 111932, "b": "2" }, { "t": 112144, "s": "3" }, { "t": 112459, "s": "3" }, { "t": 112773, "s": "3" }, { "t": 112888, "b": "1" }, { "t": 113093, "s": "3" }, { "t": 113419, "s": "3" }, { "t": 113723, "s": "3" }, { "t": 113796, "b": "2" }, { "t": 114032, "s": "2" }, { "t": 114336, "s": "2" }, { "t": 114651, "s": "3" }, { "t": 114864, "b": "1" }, { "t": 114965, "s": "1" }, { "t": 115280, "s": "2" }, { "t": 115584, "s": "3" }, { "t": 115888, "s": "3" }, { "t": 115904, "b": "2" }, { "t": 116208, "s": "2" }, { "t": 116523, "s": "3" }, { "t": 116837, "s": "2" }, { "t": 116864, "b": "2" }, { "t": 117147, "s": "3" }, { "t": 117451, "s": "3" }, { "t": 117787, "s": "3" }, { "t": 117792, "b": "1" }, { "t": 118101, "s": "3" }, { "t": 118405, "s": "3" }, { "t": 118741, "s": "2" }, { "t": 119051, "s": "2" }, { "t": 119184, "b": "2" }, { "t": 119360, "s": "1" }, { "t": 119664, "s": "2" }, { "t": 119973, "s": "3" }, { "t": 120244, "b": "1" }, { "t": 120283, "s": "2" }, { "t": 120603, "s": "3" }, { "t": 120912, "s": "3" }, { "t": 121112, "b": "2" }, { "t": 121216, "s": "3" }, { "t": 121525, "s": "3" }, { "t": 121829, "s": "3" }, { "t": 122121, "b": "3" }, { "t": 122293, "s": "1" }, { "t": 122744, "b": "3" }, { "t": 122779, "s": "1" }, { "t": 123099, "s": "1" }, { "t": 123260, "b": "3" }, { "t": 123504, "s": "1" }, { "t": 123784, "b": "3" }, { "t": 123845, "s": "1" }, { "t": 124217, "b": "3" }, { "t": 124352, "s": "1" }, { "t": 124699, "s": "1" }, { "t": 125024, "s": "1" }, { "t": 125333, "s": "1" }, { "t": 125620, "b": "1" }, { "t": 125648, "s": "1" }, { "t": 125979, "s": "1" }, { "t": 126325, "s": "1" }, { "t": 126635, "s": "1" }, { "t": 126668, "b": "2" }, { "t": 126960, "s": "1" }, { "t": 127275, "s": "1" }, { "t": 127589, "s": "1" }, { "t": 127788, "b": "1" }, { "t": 128059, "s": "1" }, { "t": 128523, "s": "1" }, { "t": 128796, "b": "2" }, { "t": 128837, "s": "2" }, { "t": 129173, "s": "1" }, { "t": 129483, "s": "2" }, { "t": 129716, "b": "1" }, { "t": 129813, "s": "2" }, { "t": 130133, "s": "1" }, { "t": 130437, "s": "1" }, { "t": 130741, "s": "1" }, { "t": 130884, "b": "2" }, { "t": 131109, "s": "1" }, { "t": 131413, "s": "1" }, { "t": 131739, "s": "2" }, { "t": 131936, "b": "1" }, { "t": 132080, "s": "2" }, { "t": 132384, "s": "2" }, { "t": 132784, "s": "1" }, { "t": 132932, "b": "2" }, { "t": 133093, "s": "1" }, { "t": 133408, "s": "2" }, { "t": 133739, "s": "1" }, { "t": 134069, "s": "1" }, { "t": 134092, "b": "1" }, { "t": 134389, "s": "1" }, { "t": 134709, "s": "1" }, { "t": 135019, "s": "1" }, { "t": 135124, "b": "2" }, { "t": 135355, "s": "1" }, { "t": 135733, "s": "1" }, { "t": 136064, "s": "2" }, { "t": 136160, "b": "1" }, { "t": 136384, "s": "3" }, { "t": 136693, "s": "1" }, { "t": 137024, "s": "2" }, { "t": 137128, "b": "2" }, { "t": 137339, "s": "2" }, { "t": 137776, "s": "1" }, { "t": 138261, "s": "1" }, { "t": 138741, "s": "1" }, { "t": 139109, "s": "1" }, { "t": 139435, "s": "1" }, { "t": 139693, "b": "3" }, { "t": 139744, "s": "2" }, { "t": 140048, "s": "2" }, { "t": 140208, "b": "3" }, { "t": 140352, "s": "3" }, { "t": 140656, "s": "3" }, { "t": 140712, "b": "3" }, { "t": 140987, "s": "2" }, { "t": 141216, "b": "3" }, { "t": 141291, "s": "3" }, { "t": 141605, "s": "3" }, { "t": 141700, "b": "3" }, { "t": 141909, "s": "3" }, { "t": 142164, "b": "3" }, { "t": 142251, "s": "1" }, { "t": 142555, "s": "1" }, { "t": 142668, "b": "3" }, { "t": 142859, "s": "3" }, { "t": 143164, "b": "3" }, { "t": 143184, "s": "3" }, { "t": 143504, "s": "3" }, { "t": 143668, "b": "1" }, { "t": 143813, "s": "2" }, { "t": 144123, "s": "3" }, { "t": 144427, "s": "2" }, { "t": 144484, "b": "2" }, { "t": 144741, "s": "3" }, { "t": 145061, "s": "3" }, { "t": 145365, "s": "3" }, { "t": 145412, "b": "1" }, { "t": 145685, "s": "3" }, { "t": 146000, "s": "3" }, { "t": 146309, "s": "2" }, { "t": 146340, "b": "2" }, { "t": 146624, "s": "3" }, { "t": 146928, "s": "2" }, { "t": 147237, "s": "2" }, { "t": 147547, "s": "3" }, { "t": 147708, "b": "3" }, { "t": 147851, "s": "2" }, { "t": 148165, "s": "3" }, { "t": 148304, "b": "3" }, { "t": 148480, "s": "3" }, { "t": 148784, "s": "2" }, { "t": 148820, "b": "3" }, { "t": 149104, "s": "3" }, { "t": 149312, "b": "3" }, { "t": 149413, "s": "3" }, { "t": 149717, "s": "3" }, { "t": 149908, "b": "1" }, { "t": 150032, "s": "2" }, { "t": 150336, "s": "2" }, { "t": 150651, "s": "2" }, { "t": 150804, "b": "2" }, { "t": 150971, "s": "3" }, { "t": 151285, "s": "2" }, { "t": 151600, "s": "3" }, { "t": 151784, "b": "3" }, { "t": 151904, "s": "3" }, { "t": 152208, "s": "3" }, { "t": 152328, "b": "3" }, { "t": 152517, "s": "3" }, { "t": 152821, "s": "3" }, { "t": 152832, "b": "3" }, { "t": 153236, "b": "3" }, { "t": 153248, "s": "1" }, { "t": 153680, "b": "1" }, { "t": 153728, "s": "1" }, { "t": 154208, "s": "1" }, { "t": 154518, "b": "2" }, { "t": 154576, "s": "1" }] }, { "name": "Freedom", "duration": 153600, "songBeats": [{ "t": 0, "s": "3" }, { "t": 315, "s": "3" }, { "t": 619, "s": "1" }, { "t": 928, "s": "1" }, { "t": 1355, "s": "1" }, { "t": 1739, "s": "1" }, { "t": 2176, "s": "1" }, { "t": 2539, "s": "1" }, { "t": 2848, "s": "1" }, { "t": 3173, "s": "2" }, { "t": 3218, "b": "1" }, { "t": 3488, "s": "1" }, { "t": 3522, "b": "1" }, { "t": 4037, "s": "1" }, { "t": 4358, "b": "2" }, { "t": 4480, "s": "1" }, { "t": 4661, "b": "2" }, { "t": 4837, "s": "1" }, { "t": 5163, "s": "1" }, { "t": 5378, "b": "1" }, { "t": 5520, "s": "2" }, { "t": 5682, "b": "1" }, { "t": 5899, "s": "1" }, { "t": 5980, "b": "1" }, { "t": 6341, "s": "1" }, { "t": 6557, "b": "2" }, { "t": 6704, "s": "1" }, { "t": 6862, "b": "2" }, { "t": 7045, "s": "2" }, { "t": 7166, "b": "2" }, { "t": 7365, "s": "1" }, { "t": 7670, "b": "1" }, { "t": 7696, "s": "1" }, { "t": 7974, "b": "1" }, { "t": 8080, "s": "1" }, { "t": 8271, "b": "1" }, { "t": 8405, "s": "1" }, { "t": 8709, "s": "1" }, { "t": 8719, "b": "2" }, { "t": 9023, "b": "2" }, { "t": 9109, "s": "1" }, { "t": 9322, "b": "2" }, { "t": 9483, "s": "1" }, { "t": 9819, "s": "1" }, { "t": 9926, "b": "0" }, { "t": 10128, "s": "2" }, { "t": 10234, "b": "0" }, { "t": 10437, "s": "2" }, { "t": 10747, "s": "3" }, { "t": 11037, "b": "2" }, { "t": 11072, "s": "2" }, { "t": 11341, "b": "2" }, { "t": 11387, "s": "2" }, { "t": 11691, "s": "3" }, { "t": 11741, "b": "1" }, { "t": 12005, "s": "3" }, { "t": 12044, "b": "1" }, { "t": 12278, "b": "2" }, { "t": 12352, "s": "2" }, { "t": 12578, "b": "2" }, { "t": 12656, "s": "1" }, { "t": 12842, "b": "1" }, { "t": 12976, "s": "2" }, { "t": 13155, "b": "1" }, { "t": 13296, "s": "1" }, { "t": 13438, "b": "2" }, { "t": 13600, "s": "3" }, { "t": 13744, "b": "2" }, { "t": 13904, "s": "3" }, { "t": 13982, "b": "1" }, { "t": 14208, "s": "2" }, { "t": 14289, "b": "1" }, { "t": 14528, "s": "1" }, { "t": 14569, "b": "2" }, { "t": 14832, "s": "2" }, { "t": 14875, "b": "2" }, { "t": 15147, "s": "3" }, { "t": 15233, "b": "1" }, { "t": 15451, "s": "2" }, { "t": 15544, "b": "1" }, { "t": 15755, "s": "3" }, { "t": 15789, "b": "2" }, { "t": 16059, "s": "3" }, { "t": 16099, "b": "2" }, { "t": 16340, "b": "1" }, { "t": 16363, "s": "3" }, { "t": 16641, "b": "1" }, { "t": 16667, "s": "2" }, { "t": 16881, "b": "2" }, { "t": 16981, "s": "2" }, { "t": 17186, "b": "2" }, { "t": 17296, "s": "1" }, { "t": 17600, "s": "1" }, { "t": 17921, "b": "1" }, { "t": 17947, "s": "2" }, { "t": 18193, "b": "1" }, { "t": 18256, "s": "2" }, { "t": 18447, "b": "1" }, { "t": 18603, "s": "3" }, { "t": 18697, "b": "1" }, { "t": 18949, "s": "2" }, { "t": 19007, "b": "1" }, { "t": 19275, "s": "2" }, { "t": 19589, "s": "3" }, { "t": 19738, "b": "2" }, { "t": 19893, "s": "2" }, { "t": 20045, "b": "2" }, { "t": 20213, "s": "1" }, { "t": 20340, "b": "2" }, { "t": 20768, "s": "1" }, { "t": 21083, "s": "1" }, { "t": 21321, "b": "2" }, { "t": 21440, "s": "1" }, { "t": 21623, "b": "2" }, { "t": 21765, "s": "1" }, { "t": 21934, "b": "2" }, { "t": 22085, "s": "1" }, { "t": 22223, "b": "2" }, { "t": 22512, "s": "1" }, { "t": 22827, "s": "1" }, { "t": 23189, "s": "1" }, { "t": 23453, "b": "2" }, { "t": 23499, "s": "1" }, { "t": 23767, "b": "2" }, { "t": 23803, "s": "1" }, { "t": 24057, "b": "2" }, { "t": 24149, "s": "1" }, { "t": 24480, "s": "1" }, { "t": 24843, "s": "1" }, { "t": 25269, "s": "1" }, { "t": 25627, "s": "1" }, { "t": 25968, "s": "1" }, { "t": 26197, "b": "1" }, { "t": 26293, "s": "1" }, { "t": 26507, "b": "1" }, { "t": 26597, "s": "1" }, { "t": 26987, "s": "1" }, { "t": 27085, "b": "1" }, { "t": 27360, "s": "1" }, { "t": 27387, "b": "1" }, { "t": 27698, "b": "1" }, { "t": 27776, "s": "1" }, { "t": 28128, "s": "3" }, { "t": 28473, "b": "3" }, { "t": 28501, "s": "2" }, { "t": 28848, "s": "1" }, { "t": 29066, "b": "3" }, { "t": 29152, "s": "2" }, { "t": 29467, "s": "2" }, { "t": 29658, "b": "3" }, { "t": 29776, "s": "1" }, { "t": 30085, "s": "2" }, { "t": 30197, "b": "3" }, { "t": 30400, "s": "3" }, { "t": 30715, "s": "3" }, { "t": 30770, "b": "3" }, { "t": 31029, "s": "1" }, { "t": 31071, "b": "3" }, { "t": 31285, "b": "2" }, { "t": 31392, "s": "3" }, { "t": 31596, "b": "2" }, { "t": 31717, "s": "1" }, { "t": 32048, "s": "1" }, { "t": 32062, "b": "1" }, { "t": 32367, "b": "1" }, { "t": 32368, "s": "1" }, { "t": 32663, "b": "1" }, { "t": 32741, "s": "2" }, { "t": 33045, "s": "3" }, { "t": 33129, "b": "2" }, { "t": 33430, "b": "2" }, { "t": 33467, "s": "1" }, { "t": 33736, "b": "2" }, { "t": 33771, "s": "2" }, { "t": 34091, "s": "3" }, { "t": 34190, "b": "1" }, { "t": 34411, "s": "2" }, { "t": 34491, "b": "1" }, { "t": 34731, "s": "1" }, { "t": 34798, "b": "1" }, { "t": 35051, "s": "3" }, { "t": 35218, "b": "2" }, { "t": 35387, "s": "3" }, { "t": 35520, "b": "2" }, { "t": 35771, "s": "1" }, { "t": 35829, "b": "2" }, { "t": 36181, "s": "1" }, { "t": 36417, "b": "3" }, { "t": 36491, "s": "3" }, { "t": 36731, "b": "3" }, { "t": 36805, "s": "2" }, { "t": 37021, "b": "3" }, { "t": 37120, "s": "2" }, { "t": 37337, "b": "3" }, { "t": 37445, "s": "2" }, { "t": 37755, "s": "3" }, { "t": 38080, "s": "1" }, { "t": 38194, "b": "1" }, { "t": 38384, "s": "2" }, { "t": 38504, "b": "1" }, { "t": 38704, "s": "2" }, { "t": 39019, "s": "3" }, { "t": 39194, "b": "2" }, { "t": 39344, "s": "2" }, { "t": 39509, "b": "2" }, { "t": 39653, "s": "2" }, { "t": 39963, "s": "3" }, { "t": 40170, "b": "1" }, { "t": 40325, "s": "1" }, { "t": 40471, "b": "1" }, { "t": 40629, "s": "2" }, { "t": 40949, "s": "1" }, { "t": 41241, "b": "2" }, { "t": 41253, "s": "1" }, { "t": 41551, "b": "2" }, { "t": 41579, "s": "2" }, { "t": 41952, "s": "1" }, { "t": 42261, "s": "2" }, { "t": 42277, "b": "1" }, { "t": 42571, "s": "2" }, { "t": 42583, "b": "1" }, { "t": 42875, "s": "3" }, { "t": 42878, "b": "1" }, { "t": 43269, "s": "1" }, { "t": 43417, "b": "2" }, { "t": 43595, "s": "3" }, { "t": 43731, "b": "2" }, { "t": 43915, "s": "2" }, { "t": 44029, "b": "2" }, { "t": 44224, "s": "3" }, { "t": 44565, "s": "2" }, { "t": 44880, "s": "3" }, { "t": 45189, "s": "2" }, { "t": 45454, "b": "3" }, { "t": 45515, "s": "2" }, { "t": 45840, "s": "1" }, { "t": 45917, "b": "3" }, { "t": 46223, "b": "3" }, { "t": 46293, "s": "1" }, { "t": 46429, "b": "3" }, { "t": 46597, "s": "3" }, { "t": 46735, "b": "3" }, { "t": 46923, "s": "3" }, { "t": 47197, "b": "2" }, { "t": 47227, "s": "3" }, { "t": 47509, "b": "2" }, { "t": 47541, "s": "2" }, { "t": 47803, "b": "2" }, { "t": 47861, "s": "3" }, { "t": 48165, "s": "2" }, { "t": 48469, "s": "2" }, { "t": 48773, "s": "2" }, { "t": 49050, "b": "1" }, { "t": 49083, "s": "2" }, { "t": 49354, "b": "1" }, { "t": 49387, "s": "2" }, { "t": 49660, "b": "1" }, { "t": 49701, "s": "3" }, { "t": 50005, "s": "3" }, { "t": 50315, "s": "2" }, { "t": 50624, "s": "3" }, { "t": 50997, "s": "3" }, { "t": 51274, "b": "2" }, { "t": 51301, "s": "2" }, { "t": 51574, "b": "2" }, { "t": 51611, "s": "2" }, { "t": 51885, "b": "2" }, { "t": 51957, "s": "3" }, { "t": 52267, "s": "2" }, { "t": 52576, "s": "3" }, { "t": 52880, "s": "3" }, { "t": 53205, "s": "2" }, { "t": 53520, "s": "3" }, { "t": 53692, "b": "1" }, { "t": 53835, "s": "3" }, { "t": 53995, "b": "1" }, { "t": 54139, "s": "3" }, { "t": 54293, "b": "1" }, { "t": 54443, "s": "3" }, { "t": 54600, "b": "1" }, { "t": 54752, "s": "2" }, { "t": 54893, "b": "1" }, { "t": 55083, "s": "1" }, { "t": 55424, "s": "1" }, { "t": 56085, "s": "1" }, { "t": 56400, "s": "2" }, { "t": 56715, "s": "3" }, { "t": 56858, "b": "0" }, { "t": 57093, "s": "1" }, { "t": 57361, "b": "0" }, { "t": 57403, "s": "1" }, { "t": 57728, "s": "2" }, { "t": 57969, "b": "0" }, { "t": 58032, "s": "2" }, { "t": 58336, "s": "2" }, { "t": 58489, "b": "0" }, { "t": 58640, "s": "3" }, { "t": 58944, "s": "1" }, { "t": 58986, "b": "2" }, { "t": 59264, "s": "3" }, { "t": 59290, "b": "2" }, { "t": 59579, "s": "3" }, { "t": 59883, "s": "3" }, { "t": 60113, "b": "1" }, { "t": 60208, "s": "2" }, { "t": 60416, "b": "1" }, { "t": 60523, "s": "2" }, { "t": 60837, "s": "2" }, { "t": 61138, "b": "2" }, { "t": 61141, "s": "1" }, { "t": 61438, "b": "2" }, { "t": 61451, "s": "2" }, { "t": 61741, "b": "2" }, { "t": 61765, "s": "2" }, { "t": 62085, "s": "3" }, { "t": 62366, "b": "1" }, { "t": 62395, "s": "2" }, { "t": 62675, "b": "1" }, { "t": 62704, "s": "3" }, { "t": 63024, "s": "2" }, { "t": 63344, "s": "2" }, { "t": 63453, "b": "2" }, { "t": 63653, "s": "2" }, { "t": 63756, "b": "2" }, { "t": 63957, "s": "2" }, { "t": 64141, "b": "3" }, { "t": 64283, "s": "2" }, { "t": 64608, "s": "2" }, { "t": 64745, "b": "3" }, { "t": 64912, "s": "3" }, { "t": 65057, "b": "3" }, { "t": 65253, "s": "2" }, { "t": 65573, "s": "2" }, { "t": 65833, "b": "1" }, { "t": 65904, "s": "2" }, { "t": 66138, "b": "1" }, { "t": 66213, "s": "2" }, { "t": 66533, "s": "3" }, { "t": 66869, "s": "1" }, { "t": 66994, "b": "2" }, { "t": 67173, "s": "2" }, { "t": 67298, "b": "2" }, { "t": 67477, "s": "2" }, { "t": 67787, "s": "2" }, { "t": 68093, "b": "1" }, { "t": 68117, "s": "2" }, { "t": 68399, "b": "1" }, { "t": 68437, "s": "3" }, { "t": 68747, "s": "2" }, { "t": 69067, "s": "2" }, { "t": 69121, "b": "2" }, { "t": 69371, "s": "3" }, { "t": 69426, "b": "2" }, { "t": 69675, "s": "3" }, { "t": 70000, "s": "3" }, { "t": 70138, "b": "1" }, { "t": 70389, "s": "1" }, { "t": 70439, "b": "1" }, { "t": 70704, "s": "2" }, { "t": 70746, "b": "1" }, { "t": 71013, "s": "3" }, { "t": 71342, "b": "2" }, { "t": 71344, "s": "2" }, { "t": 71653, "b": "2" }, { "t": 71653, "s": "1" }, { "t": 71963, "s": "1" }, { "t": 72272, "s": "3" }, { "t": 72592, "s": "2" }, { "t": 72896, "s": "1" }, { "t": 73205, "s": "3" }, { "t": 73313, "b": "3" }, { "t": 73563, "s": "1" }, { "t": 73857, "b": "3" }, { "t": 73877, "s": "2" }, { "t": 74174, "b": "3" }, { "t": 74181, "s": "3" }, { "t": 74528, "s": "3" }, { "t": 75019, "s": "1" }, { "t": 75328, "s": "1" }, { "t": 75786, "b": "1" }, { "t": 76011, "s": "1" }, { "t": 76088, "b": "1" }, { "t": 76336, "s": "1" }, { "t": 76396, "b": "1" }, { "t": 76651, "s": "1" }, { "t": 77008, "s": "1" }, { "t": 77390, "b": "2" }, { "t": 77429, "s": "1" }, { "t": 77692, "b": "2" }, { "t": 77872, "s": "1" }, { "t": 77998, "b": "2" }, { "t": 78293, "s": "1" }, { "t": 78624, "s": "1" }, { "t": 78933, "s": "1" }, { "t": 78977, "b": "1" }, { "t": 79237, "s": "1" }, { "t": 79281, "b": "1" }, { "t": 79590, "b": "1" }, { "t": 79616, "s": "1" }, { "t": 80064, "s": "1" }, { "t": 80459, "s": "1" }, { "t": 80665, "b": "2" }, { "t": 80779, "s": "1" }, { "t": 80975, "b": "2" }, { "t": 81125, "s": "1" }, { "t": 81429, "s": "1" }, { "t": 81733, "s": "3" }, { "t": 82069, "s": "1" }, { "t": 82373, "s": "2" }, { "t": 82473, "b": "1" }, { "t": 82715, "s": "2" }, { "t": 82782, "b": "1" }, { "t": 83051, "s": "1" }, { "t": 83190, "b": "2" }, { "t": 83371, "s": "3" }, { "t": 83499, "b": "2" }, { "t": 83723, "s": "1" }, { "t": 83937, "b": "3" }, { "t": 84032, "s": "3" }, { "t": 84357, "s": "3" }, { "t": 84667, "s": "3" }, { "t": 84971, "s": "3" }, { "t": 85038, "b": "3" }, { "t": 85291, "s": "3" }, { "t": 85341, "b": "3" }, { "t": 85605, "s": "2" }, { "t": 85915, "s": "2" }, { "t": 85953, "b": "1" }, { "t": 86229, "s": "3" }, { "t": 86263, "b": "1" }, { "t": 86539, "s": "3" }, { "t": 86864, "s": "3" }, { "t": 87086, "b": "2" }, { "t": 87179, "s": "2" }, { "t": 87391, "b": "2" }, { "t": 87488, "s": "2" }, { "t": 87797, "s": "2" }, { "t": 88107, "s": "2" }, { "t": 88123, "b": "1" }, { "t": 88411, "s": "3" }, { "t": 88424, "b": "1" }, { "t": 88731, "s": "2" }, { "t": 89072, "s": "2" }, { "t": 89153, "b": "2" }, { "t": 89387, "s": "2" }, { "t": 89457, "b": "2" }, { "t": 89696, "s": "3" }, { "t": 89766, "b": "2" }, { "t": 90005, "s": "3" }, { "t": 90221, "b": "1" }, { "t": 90309, "s": "3" }, { "t": 90524, "b": "1" }, { "t": 90619, "s": "3" }, { "t": 90933, "s": "2" }, { "t": 91150, "b": "3" }, { "t": 91253, "s": "2" }, { "t": 91451, "b": "3" }, { "t": 91557, "s": "2" }, { "t": 91826, "b": "3" }, { "t": 91931, "s": "3" }, { "t": 92136, "b": "3" }, { "t": 92363, "s": "2" }, { "t": 92741, "s": "1" }, { "t": 93045, "s": "3" }, { "t": 93077, "b": "1" }, { "t": 93386, "b": "1" }, { "t": 93472, "s": "1" }, { "t": 93797, "s": "3" }, { "t": 94112, "s": "3" }, { "t": 94166, "b": "2" }, { "t": 94421, "s": "3" }, { "t": 94480, "b": "2" }, { "t": 94752, "s": "2" }, { "t": 95056, "s": "2" }, { "t": 95386, "b": "1" }, { "t": 95392, "s": "3" }, { "t": 95686, "b": "1" }, { "t": 95760, "s": "1" }, { "t": 96069, "s": "3" }, { "t": 96395, "s": "2" }, { "t": 96617, "b": "2" }, { "t": 96715, "s": "2" }, { "t": 96926, "b": "2" }, { "t": 97035, "s": "2" }, { "t": 97344, "s": "2" }, { "t": 97648, "s": "2" }, { "t": 97798, "b": "1" }, { "t": 98048, "s": "1" }, { "t": 98103, "b": "1" }, { "t": 98352, "s": "2" }, { "t": 98656, "s": "1" }, { "t": 98938, "b": "2" }, { "t": 98965, "s": "2" }, { "t": 99246, "b": "2" }, { "t": 99269, "s": "2" }, { "t": 99544, "b": "2" }, { "t": 99579, "s": "3" }, { "t": 99893, "s": "2" }, { "t": 100077, "b": "1" }, { "t": 100208, "s": "3" }, { "t": 100382, "b": "1" }, { "t": 100512, "s": "3" }, { "t": 100680, "b": "1" }, { "t": 100821, "s": "3" }, { "t": 101131, "s": "3" }, { "t": 101145, "b": "2" }, { "t": 101445, "s": "3" }, { "t": 101447, "b": "2" }, { "t": 101747, "b": "2" }, { "t": 101749, "s": "3" }, { "t": 102117, "s": "2" }, { "t": 102325, "b": "3" }, { "t": 102421, "s": "3" }, { "t": 102628, "b": "3" }, { "t": 102731, "s": "3" }, { "t": 103045, "s": "2" }, { "t": 103365, "s": "3" }, { "t": 103481, "b": "3" }, { "t": 103669, "s": "1" }, { "t": 103782, "b": "3" }, { "t": 103973, "s": "2" }, { "t": 104309, "s": "2" }, { "t": 104635, "s": "2" }, { "t": 104854, "b": "3" }, { "t": 104960, "s": "1" }, { "t": 105166, "b": "3" }, { "t": 105285, "s": "1" }, { "t": 105589, "s": "2" }, { "t": 105893, "s": "1" }, { "t": 106094, "b": "3" }, { "t": 106240, "s": "1" }, { "t": 106401, "b": "3" }, { "t": 106587, "s": "1" }, { "t": 106891, "s": "3" }, { "t": 107200, "s": "2" }, { "t": 107266, "b": "3" }, { "t": 107504, "s": "3" }, { "t": 107569, "b": "3" }, { "t": 107829, "s": "2" }, { "t": 108144, "s": "3" }, { "t": 108453, "s": "2" }, { "t": 108506, "b": "3" }, { "t": 108809, "b": "3" }, { "t": 108848, "s": "2" }, { "t": 109157, "s": "1" }, { "t": 109493, "s": "1" }, { "t": 109808, "s": "3" }, { "t": 110123, "s": "1" }, { "t": 110432, "s": "1" }, { "t": 110741, "s": "1" }, { "t": 110938, "b": "1" }, { "t": 111056, "s": "1" }, { "t": 111241, "b": "1" }, { "t": 111403, "s": "1" }, { "t": 111776, "s": "1" }, { "t": 112128, "s": "3" }, { "t": 112218, "b": "2" }, { "t": 112432, "s": "3" }, { "t": 112521, "b": "2" }, { "t": 112757, "s": "2" }, { "t": 112823, "b": "2" }, { "t": 113061, "s": "3" }, { "t": 113365, "s": "3" }, { "t": 113621, "b": "1" }, { "t": 113675, "s": "2" }, { "t": 113930, "b": "1" }, { "t": 114005, "s": "3" }, { "t": 114309, "s": "2" }, { "t": 114613, "s": "3" }, { "t": 114881, "b": "2" }, { "t": 114917, "s": "2" }, { "t": 115191, "b": "2" }, { "t": 115227, "s": "3" }, { "t": 115490, "b": "2" }, { "t": 115536, "s": "3" }, { "t": 115845, "s": "3" }, { "t": 115989, "b": "1" }, { "t": 116187, "s": "2" }, { "t": 116291, "b": "1" }, { "t": 116539, "s": "2" }, { "t": 116596, "b": "1" }, { "t": 116848, "s": "3" }, { "t": 117138, "b": "2" }, { "t": 117157, "s": "3" }, { "t": 117447, "b": "2" }, { "t": 117477, "s": "2" }, { "t": 117740, "b": "2" }, { "t": 117781, "s": "3" }, { "t": 118091, "s": "2" }, { "t": 118416, "s": "2" }, { "t": 118731, "s": "3" }, { "t": 118830, "b": "3" }, { "t": 119045, "s": "3" }, { "t": 119132, "b": "3" }, { "t": 119365, "s": "3" }, { "t": 119449, "b": "3" }, { "t": 119739, "s": "1" }, { "t": 119756, "b": "3" }, { "t": 120080, "s": "1" }, { "t": 120432, "s": "1" }, { "t": 120736, "s": "3" }, { "t": 120885, "b": "1" }, { "t": 121040, "s": "2" }, { "t": 121192, "b": "1" }, { "t": 121392, "s": "3" }, { "t": 121707, "s": "2" }, { "t": 122011, "s": "3" }, { "t": 122073, "b": "2" }, { "t": 122331, "s": "2" }, { "t": 122374, "b": "2" }, { "t": 122661, "s": "2" }, { "t": 122997, "s": "3" }, { "t": 123157, "b": "1" }, { "t": 123301, "s": "3" }, { "t": 123460, "b": "1" }, { "t": 123605, "s": "3" }, { "t": 123941, "s": "3" }, { "t": 124256, "s": "3" }, { "t": 124402, "b": "2" }, { "t": 124576, "s": "2" }, { "t": 124708, "b": "2" }, { "t": 124880, "s": "2" }, { "t": 125200, "s": "3" }, { "t": 125525, "s": "3" }, { "t": 125533, "b": "1" }, { "t": 125834, "b": "1" }, { "t": 125840, "s": "2" }, { "t": 126155, "s": "3" }, { "t": 126469, "s": "2" }, { "t": 126779, "s": "2" }, { "t": 126806, "b": "2" }, { "t": 127104, "s": "3" }, { "t": 127113, "b": "2" }, { "t": 127413, "s": "2" }, { "t": 127723, "s": "3" }, { "t": 128027, "s": "3" }, { "t": 128186, "b": "3" }, { "t": 128341, "s": "3" }, { "t": 128491, "b": "3" }, { "t": 128651, "s": "3" }, { "t": 128953, "b": "3" }, { "t": 128960, "s": "3" }, { "t": 129255, "b": "3" }, { "t": 129280, "s": "3" }, { "t": 129595, "s": "3" }, { "t": 129909, "s": "3" }, { "t": 129941, "b": "1" }, { "t": 130229, "s": "3" }, { "t": 130242, "b": "1" }, { "t": 130533, "s": "3" }, { "t": 130843, "s": "2" }, { "t": 131093, "b": "2" }, { "t": 131211, "s": "1" }, { "t": 131395, "b": "2" }, { "t": 131531, "s": "2" }, { "t": 131702, "b": "2" }, { "t": 131845, "s": "1" }, { "t": 132155, "s": "3" }, { "t": 132305, "b": "1" }, { "t": 132480, "s": "2" }, { "t": 132609, "b": "1" }, { "t": 132784, "s": "3" }, { "t": 133099, "s": "3" }, { "t": 133401, "b": "2" }, { "t": 133413, "s": "3" }, { "t": 133706, "b": "2" }, { "t": 133744, "s": "3" }, { "t": 134002, "b": "2" }, { "t": 134048, "s": "2" }, { "t": 134352, "s": "3" }, { "t": 134550, "b": "1" }, { "t": 134672, "s": "3" }, { "t": 134856, "b": "1" }, { "t": 134987, "s": "2" }, { "t": 135333, "s": "3" }, { "t": 135593, "b": "2" }, { "t": 135637, "s": "3" }, { "t": 135896, "b": "2" }, { "t": 135947, "s": "3" }, { "t": 136206, "b": "2" }, { "t": 136261, "s": "3" }, { "t": 136571, "s": "3" }, { "t": 136885, "s": "3" }, { "t": 137195, "s": "3" }, { "t": 137238, "b": "3" }, { "t": 137504, "s": "3" }, { "t": 137538, "b": "3" }, { "t": 137819, "s": "3" }, { "t": 137881, "b": "3" }, { "t": 138123, "s": "3" }, { "t": 138183, "b": "3" }, { "t": 138432, "s": "3" }, { "t": 138497, "b": "3" }, { "t": 138802, "b": "3" }, { "t": 140544, "s": "2" }, { "t": 140853, "s": "2" }, { "t": 141045, "b": "1" }, { "t": 141163, "s": "3" }, { "t": 141351, "b": "1" }, { "t": 141483, "s": "1" }, { "t": 141845, "s": "1" }, { "t": 142160, "s": "1" }, { "t": 142512, "s": "1" }, { "t": 142816, "s": "2" }, { "t": 143062, "b": "2" }, { "t": 143141, "s": "1" }, { "t": 143367, "b": "2" }, { "t": 143488, "s": "1" }, { "t": 143888, "s": "1" }, { "t": 144325, "s": "1" }, { "t": 144529, "b": "1" }, { "t": 144645, "s": "1" }, { "t": 144833, "b": "1" }, { "t": 144971, "s": "1" }, { "t": 145280, "s": "2" }, { "t": 145595, "s": "1" }, { "t": 145899, "s": "1" }, { "t": 146029, "b": "2" }, { "t": 146203, "s": "2" }, { "t": 146339, "b": "2" }, { "t": 146608, "s": "1" }, { "t": 146933, "s": "1" }, { "t": 147264, "s": "1" }, { "t": 147346, "b": "1" }, { "t": 147568, "s": "1" }, { "t": 147652, "b": "1" }, { "t": 147883, "s": "1" }, { "t": 147947, "b": "1" }, { "t": 148192, "s": "1" }, { "t": 148501, "s": "1" }, { "t": 148805, "s": "1" }, { "t": 149109, "s": "1" }, { "t": 149419, "s": "1" }, { "t": 149728, "s": "1" }, { "t": 149938, "b": "3" }, { "t": 150160, "s": "1" }, { "t": 150240, "b": "3" }, { "t": 150464, "s": "2" }, { "t": 150539, "b": "3" }, { "t": 150849, "b": "3" }] }, { "name": "Stranger in the Storm", "duration": 170760, "songBeats": [{ "t": 165, "s": "1" }, { "t": 469, "s": "1" }, { "t": 582, "b": "0" }, { "t": 869, "s": "1" }, { "t": 1221, "s": "1" }, { "t": 1286, "b": "0" }, { "t": 1541, "s": "1" }, { "t": 1941, "s": "1" }, { "t": 2053, "b": "0" }, { "t": 2288, "s": "1" }, { "t": 2635, "s": "1" }, { "t": 2769, "b": "0" }, { "t": 2987, "s": "2" }, { "t": 3093, "b": "0" }, { "t": 3339, "s": "2" }, { "t": 3465, "b": "0" }, { "t": 3691, "s": "1" }, { "t": 4043, "s": "1" }, { "t": 4194, "b": "0" }, { "t": 4395, "s": "1" }, { "t": 4752, "s": "1" }, { "t": 4929, "b": "0" }, { "t": 5104, "s": "2" }, { "t": 5501, "b": "0" }, { "t": 5627, "s": "1" }, { "t": 5931, "s": "2" }, { "t": 6141, "b": "1" }, { "t": 6240, "s": "1" }, { "t": 6544, "s": "2" }, { "t": 6845, "b": "2" }, { "t": 6869, "s": "1" }, { "t": 7221, "s": "1" }, { "t": 7462, "b": "1" }, { "t": 7573, "s": "1" }, { "t": 7931, "s": "1" }, { "t": 8149, "b": "2" }, { "t": 8272, "s": "1" }, { "t": 8456, "b": "2" }, { "t": 8635, "s": "1" }, { "t": 8944, "s": "1" }, { "t": 8954, "b": "1" }, { "t": 9253, "s": "3" }, { "t": 9637, "s": "1" }, { "t": 9662, "b": "2" }, { "t": 9941, "s": "3" }, { "t": 10245, "s": "3" }, { "t": 10285, "b": "1" }, { "t": 10555, "s": "3" }, { "t": 10875, "s": "3" }, { "t": 10921, "b": "2" }, { "t": 11179, "s": "2" }, { "t": 11235, "b": "2" }, { "t": 11488, "s": "1" }, { "t": 11577, "b": "1" }, { "t": 11803, "s": "1" }, { "t": 12107, "s": "3" }, { "t": 12373, "b": "2" }, { "t": 12416, "s": "2" }, { "t": 12720, "s": "3" }, { "t": 13024, "s": "1" }, { "t": 13098, "b": "1" }, { "t": 13344, "s": "3" }, { "t": 13398, "b": "1" }, { "t": 13648, "s": "2" }, { "t": 13737, "b": "2" }, { "t": 13952, "s": "2" }, { "t": 14050, "b": "2" }, { "t": 14277, "s": "1" }, { "t": 14521, "b": "1" }, { "t": 14635, "s": "1" }, { "t": 14837, "b": "1" }, { "t": 14987, "s": "1" }, { "t": 15269, "b": "2" }, { "t": 15296, "s": "1" }, { "t": 15593, "b": "2" }, { "t": 15605, "s": "3" }, { "t": 15925, "b": "1" }, { "t": 16112, "s": "1" }, { "t": 16248, "b": "1" }, { "t": 16741, "s": "1" }, { "t": 16945, "b": "3" }, { "t": 17045, "s": "3" }, { "t": 17254, "b": "3" }, { "t": 17413, "s": "1" }, { "t": 17682, "b": "3" }, { "t": 17723, "s": "3" }, { "t": 17996, "b": "3" }, { "t": 18165, "s": "1" }, { "t": 18422, "b": "3" }, { "t": 18507, "s": "1" }, { "t": 18734, "b": "3" }, { "t": 18827, "s": "1" }, { "t": 19157, "s": "3" }, { "t": 19213, "b": "3" }, { "t": 19483, "s": "2" }, { "t": 19515, "b": "3" }, { "t": 19787, "s": "3" }, { "t": 20101, "s": "3" }, { "t": 20414, "b": "1" }, { "t": 20416, "s": "3" }, { "t": 20720, "s": "2" }, { "t": 21035, "s": "3" }, { "t": 21101, "b": "2" }, { "t": 21344, "s": "2" }, { "t": 21412, "b": "2" }, { "t": 21691, "s": "1" }, { "t": 21765, "b": "1" }, { "t": 22032, "s": "1" }, { "t": 22357, "s": "1" }, { "t": 22402, "b": "2" }, { "t": 22683, "s": "3" }, { "t": 22702, "b": "2" }, { "t": 23061, "s": "1" }, { "t": 23321, "b": "3" }, { "t": 23371, "s": "3" }, { "t": 23675, "s": "3" }, { "t": 23984, "s": "2" }, { "t": 24065, "b": "3" }, { "t": 24288, "s": "2" }, { "t": 24366, "b": "3" }, { "t": 24592, "s": "3" }, { "t": 24814, "b": "3" }, { "t": 24896, "s": "2" }, { "t": 25123, "b": "3" }, { "t": 25205, "s": "1" }, { "t": 25509, "s": "3" }, { "t": 25589, "b": "3" }, { "t": 25856, "s": "1" }, { "t": 25899, "b": "3" }, { "t": 26160, "s": "3" }, { "t": 26265, "b": "1" }, { "t": 26480, "s": "3" }, { "t": 26789, "s": "3" }, { "t": 26901, "b": "2" }, { "t": 27200, "s": "1" }, { "t": 27207, "b": "2" }, { "t": 27585, "b": "1" }, { "t": 27696, "s": "1" }, { "t": 28005, "s": "1" }, { "t": 28285, "b": "2" }, { "t": 28331, "s": "3" }, { "t": 28661, "s": "2" }, { "t": 28987, "s": "3" }, { "t": 29001, "b": "1" }, { "t": 29307, "s": "3" }, { "t": 29606, "b": "2" }, { "t": 29632, "s": "3" }, { "t": 29908, "b": "2" }, { "t": 29947, "s": "2" }, { "t": 30251, "s": "2" }, { "t": 30310, "b": "1" }, { "t": 30555, "s": "2" }, { "t": 30621, "b": "1" }, { "t": 30864, "s": "1" }, { "t": 31057, "b": "2" }, { "t": 31195, "s": "3" }, { "t": 31366, "b": "2" }, { "t": 31504, "s": "2" }, { "t": 31808, "s": "3" }, { "t": 31825, "b": "1" }, { "t": 32112, "s": "3" }, { "t": 32141, "b": "1" }, { "t": 32416, "s": "3" }, { "t": 32541, "b": "2" }, { "t": 32720, "s": "3" }, { "t": 32850, "b": "2" }, { "t": 33035, "s": "3" }, { "t": 33197, "b": "1" }, { "t": 33339, "s": "2" }, { "t": 33499, "b": "1" }, { "t": 33653, "s": "2" }, { "t": 33941, "b": "2" }, { "t": 33957, "s": "3" }, { "t": 34248, "b": "2" }, { "t": 34261, "s": "3" }, { "t": 34537, "b": "1" }, { "t": 34571, "s": "2" }, { "t": 34850, "b": "1" }, { "t": 34891, "s": "1" }, { "t": 35195, "s": "2" }, { "t": 35201, "b": "2" }, { "t": 35504, "s": "2" }, { "t": 35525, "b": "2" }, { "t": 35829, "s": "2" }, { "t": 35881, "b": "1" }, { "t": 36155, "s": "2" }, { "t": 36194, "b": "1" }, { "t": 36469, "s": "1" }, { "t": 36526, "b": "2" }, { "t": 36773, "s": "3" }, { "t": 36839, "b": "2" }, { "t": 37077, "s": "3" }, { "t": 37282, "b": "1" }, { "t": 37387, "s": "3" }, { "t": 37701, "s": "3" }, { "t": 37905, "b": "2" }, { "t": 38011, "s": "3" }, { "t": 38207, "b": "2" }, { "t": 38336, "s": "3" }, { "t": 38640, "s": "3" }, { "t": 38645, "b": "1" }, { "t": 38949, "b": "1" }, { "t": 38981, "s": "1" }, { "t": 39296, "s": "2" }, { "t": 39301, "b": "2" }, { "t": 39602, "b": "2" }, { "t": 39605, "s": "3" }, { "t": 39909, "s": "3" }, { "t": 40157, "b": "3" }, { "t": 40213, "s": "2" }, { "t": 40528, "s": "2" }, { "t": 40848, "s": "2" }, { "t": 40965, "b": "3" }, { "t": 41163, "s": "2" }, { "t": 41477, "s": "2" }, { "t": 41721, "b": "3" }, { "t": 41781, "s": "2" }, { "t": 42031, "b": "3" }, { "t": 42165, "s": "2" }, { "t": 42466, "b": "3" }, { "t": 42501, "s": "2" }, { "t": 42790, "b": "3" }, { "t": 42821, "s": "2" }, { "t": 43125, "s": "3" }, { "t": 43440, "s": "3" }, { "t": 43744, "s": "3" }, { "t": 43749, "b": "1" }, { "t": 44057, "b": "1" }, { "t": 44059, "s": "2" }, { "t": 44363, "s": "3" }, { "t": 44533, "b": "2" }, { "t": 44683, "s": "2" }, { "t": 44987, "s": "3" }, { "t": 45149, "b": "1" }, { "t": 45328, "s": "3" }, { "t": 45643, "s": "2" }, { "t": 45933, "b": "2" }, { "t": 45957, "s": "3" }, { "t": 46247, "b": "2" }, { "t": 46267, "s": "3" }, { "t": 46576, "s": "3" }, { "t": 46673, "b": "1" }, { "t": 46885, "s": "3" }, { "t": 47221, "s": "3" }, { "t": 47317, "b": "2" }, { "t": 47525, "s": "3" }, { "t": 47631, "b": "2" }, { "t": 47829, "s": "3" }, { "t": 47973, "b": "1" }, { "t": 48267, "s": "1" }, { "t": 48683, "s": "1" }, { "t": 48987, "s": "1" }, { "t": 49419, "s": "1" }, { "t": 49781, "s": "1" }, { "t": 49917, "b": "3" }, { "t": 50107, "s": "1" }, { "t": 50621, "b": "3" }, { "t": 50811, "s": "2" }, { "t": 51120, "s": "1" }, { "t": 51424, "s": "2" }, { "t": 51517, "b": "1" }, { "t": 51744, "s": "1" }, { "t": 52053, "s": "1" }, { "t": 52313, "b": "2" }, { "t": 52400, "s": "1" }, { "t": 52630, "b": "2" }, { "t": 52752, "s": "1" }, { "t": 53067, "s": "1" }, { "t": 53392, "s": "1" }, { "t": 53401, "b": "1" }, { "t": 53713, "b": "1" }, { "t": 53797, "s": "1" }, { "t": 54165, "s": "2" }, { "t": 54382, "b": "2" }, { "t": 54528, "s": "1" }, { "t": 54693, "b": "2" }, { "t": 54869, "s": "1" }, { "t": 55184, "s": "1" }, { "t": 55390, "b": "1" }, { "t": 55573, "s": "1" }, { "t": 55693, "b": "1" }, { "t": 55931, "s": "1" }, { "t": 56277, "b": "2" }, { "t": 56283, "s": "1" }, { "t": 56581, "b": "2" }, { "t": 56635, "s": "1" }, { "t": 56981, "s": "1" }, { "t": 57186, "b": "1" }, { "t": 57344, "s": "1" }, { "t": 57509, "b": "1" }, { "t": 57669, "s": "1" }, { "t": 58053, "s": "1" }, { "t": 58186, "b": "2" }, { "t": 58416, "s": "1" }, { "t": 58488, "b": "2" }, { "t": 58768, "s": "1" }, { "t": 59070, "b": "1" }, { "t": 59104, "s": "1" }, { "t": 59374, "b": "1" }, { "t": 59456, "s": "1" }, { "t": 59808, "s": "1" }, { "t": 59990, "b": "2" }, { "t": 60160, "s": "1" }, { "t": 60299, "b": "2" }, { "t": 60512, "s": "1" }, { "t": 60826, "b": "1" }, { "t": 60869, "s": "2" }, { "t": 61135, "b": "1" }, { "t": 61211, "s": "1" }, { "t": 61579, "s": "1" }, { "t": 61646, "b": "2" }, { "t": 61925, "s": "1" }, { "t": 61975, "b": "2" }, { "t": 62283, "s": "1" }, { "t": 62592, "s": "2" }, { "t": 62774, "b": "3" }, { "t": 62912, "s": "3" }, { "t": 63307, "s": "1" }, { "t": 63501, "b": "3" }, { "t": 63627, "s": "3" }, { "t": 63984, "s": "1" }, { "t": 64277, "b": "3" }, { "t": 64288, "s": "3" }, { "t": 64584, "b": "3" }, { "t": 64592, "s": "3" }, { "t": 64901, "s": "1" }, { "t": 65173, "b": "2" }, { "t": 65216, "s": "3" }, { "t": 65489, "b": "2" }, { "t": 65525, "s": "3" }, { "t": 65835, "s": "3" }, { "t": 66053, "b": "2" }, { "t": 66139, "s": "3" }, { "t": 66448, "s": "3" }, { "t": 66757, "s": "3" }, { "t": 66769, "b": "2" }, { "t": 67067, "s": "3" }, { "t": 67089, "b": "2" }, { "t": 67371, "s": "3" }, { "t": 67513, "b": "2" }, { "t": 67675, "s": "3" }, { "t": 67827, "b": "2" }, { "t": 67984, "s": "3" }, { "t": 68150, "b": "1" }, { "t": 68293, "s": "3" }, { "t": 68452, "b": "1" }, { "t": 68624, "s": "2" }, { "t": 68939, "s": "2" }, { "t": 68949, "b": "1" }, { "t": 69243, "s": "3" }, { "t": 69557, "s": "1" }, { "t": 69693, "b": "1" }, { "t": 69867, "s": "1" }, { "t": 70219, "s": "1" }, { "t": 70571, "s": "1" }, { "t": 70701, "b": "0" }, { "t": 70885, "s": "2" }, { "t": 71195, "s": "2" }, { "t": 71410, "b": "0" }, { "t": 71499, "s": "1" }, { "t": 71813, "s": "2" }, { "t": 72094, "b": "0" }, { "t": 72149, "s": "1" }, { "t": 72397, "b": "0" }, { "t": 72464, "s": "1" }, { "t": 72773, "s": "3" }, { "t": 72809, "b": "0" }, { "t": 73083, "s": "3" }, { "t": 73397, "s": "2" }, { "t": 73442, "b": "0" }, { "t": 73707, "s": "3" }, { "t": 74016, "s": "3" }, { "t": 74093, "b": "1" }, { "t": 74325, "s": "3" }, { "t": 74635, "s": "3" }, { "t": 74805, "b": "2" }, { "t": 74981, "s": "2" }, { "t": 75291, "s": "3" }, { "t": 75542, "b": "1" }, { "t": 75605, "s": "3" }, { "t": 75915, "s": "3" }, { "t": 76245, "s": "3" }, { "t": 76321, "b": "2" }, { "t": 76549, "s": "2" }, { "t": 76638, "b": "2" }, { "t": 76864, "s": "2" }, { "t": 77037, "b": "1" }, { "t": 77179, "s": "2" }, { "t": 77342, "b": "1" }, { "t": 77488, "s": "2" }, { "t": 77745, "b": "2" }, { "t": 77808, "s": "2" }, { "t": 78061, "b": "2" }, { "t": 78123, "s": "2" }, { "t": 78442, "b": "1" }, { "t": 78448, "s": "3" }, { "t": 78784, "s": "2" }, { "t": 79093, "s": "3" }, { "t": 79126, "b": "2" }, { "t": 79403, "s": "3" }, { "t": 79437, "b": "2" }, { "t": 79712, "s": "3" }, { "t": 79773, "b": "1" }, { "t": 80016, "s": "3" }, { "t": 80088, "b": "1" }, { "t": 80331, "s": "3" }, { "t": 80458, "b": "2" }, { "t": 80635, "s": "1" }, { "t": 80773, "b": "2" }, { "t": 81213, "b": "1" }, { "t": 81264, "s": "1" }, { "t": 81605, "s": "1" }, { "t": 81909, "s": "2" }, { "t": 81962, "b": "3" }, { "t": 82219, "s": "2" }, { "t": 82533, "s": "1" }, { "t": 82689, "b": "3" }, { "t": 82848, "s": "2" }, { "t": 83173, "s": "2" }, { "t": 83453, "b": "3" }, { "t": 83488, "s": "2" }, { "t": 83803, "s": "2" }, { "t": 84139, "s": "2" }, { "t": 84209, "b": "3" }, { "t": 84443, "s": "2" }, { "t": 84510, "b": "3" }, { "t": 84752, "s": "3" }, { "t": 84927, "b": "3" }, { "t": 85061, "s": "2" }, { "t": 85230, "b": "3" }, { "t": 85371, "s": "2" }, { "t": 85630, "b": "3" }, { "t": 85680, "s": "2" }, { "t": 85953, "b": "3" }, { "t": 85984, "s": "2" }, { "t": 86299, "s": "2" }, { "t": 86608, "s": "2" }, { "t": 86917, "s": "2" }, { "t": 87227, "s": "2" }, { "t": 87536, "s": "2" }, { "t": 87840, "s": "2" }, { "t": 87922, "b": "1" }, { "t": 88165, "s": "2" }, { "t": 88507, "s": "2" }, { "t": 88629, "b": "2" }, { "t": 88821, "s": "2" }, { "t": 88942, "b": "2" }, { "t": 89152, "s": "2" }, { "t": 89345, "b": "1" }, { "t": 89461, "s": "2" }, { "t": 89861, "s": "2" }, { "t": 90061, "b": "2" }, { "t": 90187, "s": "2" }, { "t": 90371, "b": "2" }, { "t": 90496, "s": "3" }, { "t": 90805, "s": "2" }, { "t": 90869, "b": "1" }, { "t": 91109, "s": "2" }, { "t": 91419, "s": "2" }, { "t": 91473, "b": "2" }, { "t": 91728, "s": "2" }, { "t": 91786, "b": "2" }, { "t": 92032, "s": "3" }, { "t": 92142, "b": "1" }, { "t": 92347, "s": "3" }, { "t": 92452, "b": "1" }, { "t": 92656, "s": "3" }, { "t": 92924, "b": "2" }, { "t": 93024, "s": "3" }, { "t": 93239, "b": "2" }, { "t": 93339, "s": "2" }, { "t": 93653, "s": "2" }, { "t": 93853, "b": "3" }, { "t": 93957, "s": "2" }, { "t": 94277, "s": "2" }, { "t": 94608, "s": "3" }, { "t": 94661, "b": "3" }, { "t": 94917, "s": "1" }, { "t": 95237, "s": "2" }, { "t": 95389, "b": "3" }, { "t": 95568, "s": "2" }, { "t": 95883, "s": "2" }, { "t": 96185, "b": "3" }, { "t": 96187, "s": "3" }, { "t": 96493, "b": "3" }, { "t": 96496, "s": "2" }, { "t": 96816, "s": "2" }, { "t": 97131, "s": "3" }, { "t": 97161, "b": "1" }, { "t": 97435, "s": "2" }, { "t": 97749, "s": "2" }, { "t": 97853, "b": "2" }, { "t": 98053, "s": "2" }, { "t": 98166, "b": "2" }, { "t": 98368, "s": "3" }, { "t": 98545, "b": "1" }, { "t": 98683, "s": "2" }, { "t": 98987, "s": "2" }, { "t": 99273, "b": "2" }, { "t": 99301, "s": "2" }, { "t": 99611, "s": "3" }, { "t": 99925, "s": "3" }, { "t": 100098, "b": "1" }, { "t": 100235, "s": "3" }, { "t": 100401, "b": "1" }, { "t": 100544, "s": "1" }, { "t": 100805, "b": "2" }, { "t": 100859, "s": "2" }, { "t": 101130, "b": "2" }, { "t": 101163, "s": "2" }, { "t": 101472, "s": "2" }, { "t": 101513, "b": "1" }, { "t": 101909, "s": "1" }, { "t": 102341, "s": "1" }, { "t": 102736, "s": "1" }, { "t": 103056, "s": "1" }, { "t": 103429, "s": "1" }, { "t": 103755, "s": "1" }, { "t": 104080, "s": "1" }, { "t": 104422, "b": "3" }, { "t": 104453, "s": "2" }, { "t": 104723, "b": "3" }, { "t": 104773, "s": "3" }, { "t": 105083, "s": "2" }, { "t": 105210, "b": "3" }, { "t": 105413, "s": "3" }, { "t": 105519, "b": "3" }, { "t": 105723, "s": "2" }, { "t": 105953, "b": "3" }, { "t": 106037, "s": "1" }, { "t": 106261, "b": "3" }, { "t": 106347, "s": "2" }, { "t": 106661, "s": "3" }, { "t": 106714, "b": "3" }, { "t": 106976, "s": "3" }, { "t": 107030, "b": "3" }, { "t": 107280, "s": "3" }, { "t": 107397, "b": "1" }, { "t": 107589, "s": "3" }, { "t": 107701, "b": "1" }, { "t": 107893, "s": "3" }, { "t": 108065, "b": "2" }, { "t": 108203, "s": "3" }, { "t": 108401, "b": "2" }, { "t": 108512, "s": "3" }, { "t": 108709, "b": "1" }, { "t": 108848, "s": "3" }, { "t": 109011, "b": "1" }, { "t": 109152, "s": "3" }, { "t": 109373, "b": "2" }, { "t": 109467, "s": "3" }, { "t": 109707, "b": "2" }, { "t": 109803, "s": "3" }, { "t": 110107, "s": "3" }, { "t": 110225, "b": "1" }, { "t": 110421, "s": "2" }, { "t": 110538, "b": "1" }, { "t": 110741, "s": "2" }, { "t": 110901, "b": "2" }, { "t": 111045, "s": "2" }, { "t": 111224, "b": "2" }, { "t": 111365, "s": "2" }, { "t": 111675, "s": "2" }, { "t": 111690, "b": "1" }, { "t": 111984, "s": "1" }, { "t": 112299, "s": "3" }, { "t": 112325, "b": "2" }, { "t": 112608, "s": "3" }, { "t": 112632, "b": "2" }, { "t": 112928, "s": "3" }, { "t": 113041, "b": "1" }, { "t": 113237, "s": "3" }, { "t": 113375, "b": "1" }, { "t": 113557, "s": "3" }, { "t": 113770, "b": "2" }, { "t": 113877, "s": "3" }, { "t": 114076, "b": "2" }, { "t": 114187, "s": "3" }, { "t": 114453, "b": "1" }, { "t": 114512, "s": "1" }, { "t": 114767, "b": "1" }, { "t": 114832, "s": "1" }, { "t": 115143, "b": "2" }, { "t": 115179, "s": "1" }, { "t": 115452, "b": "2" }, { "t": 115541, "s": "1" }, { "t": 115865, "b": "3" }, { "t": 115941, "s": "1" }, { "t": 116267, "s": "1" }, { "t": 116594, "b": "3" }, { "t": 116651, "s": "1" }, { "t": 117013, "s": "1" }, { "t": 117298, "b": "3" }, { "t": 117515, "s": "2" }, { "t": 117603, "b": "3" }, { "t": 117867, "s": "1" }, { "t": 118013, "b": "3" }, { "t": 118208, "s": "1" }, { "t": 118539, "s": "1" }, { "t": 118761, "b": "3" }, { "t": 118928, "s": "2" }, { "t": 119070, "b": "3" }, { "t": 119280, "s": "2" }, { "t": 119402, "b": "3" }, { "t": 119632, "s": "2" }, { "t": 119706, "b": "3" }, { "t": 119947, "s": "1" }, { "t": 120148, "b": "3" }, { "t": 120336, "s": "1" }, { "t": 120450, "b": "3" }, { "t": 120693, "s": "2" }, { "t": 120813, "b": "3" }, { "t": 121045, "s": "2" }, { "t": 121134, "b": "3" }, { "t": 121397, "s": "2" }, { "t": 121530, "b": "1" }, { "t": 121749, "s": "2" }, { "t": 122069, "s": "1" }, { "t": 122370, "b": "1" }, { "t": 122395, "s": "1" }, { "t": 122811, "s": "1" }, { "t": 123073, "b": "1" }, { "t": 123115, "s": "1" }, { "t": 123396, "b": "1" }, { "t": 123515, "s": "2" }, { "t": 123742, "b": "1" }, { "t": 123867, "s": "2" }, { "t": 124046, "b": "1" }, { "t": 124192, "s": "2" }, { "t": 124446, "b": "2" }, { "t": 124576, "s": "2" }, { "t": 124774, "b": "2" }, { "t": 124933, "s": "3" }, { "t": 125221, "b": "2" }, { "t": 125280, "s": "1" }, { "t": 125538, "b": "2" }, { "t": 125637, "s": "2" }, { "t": 125869, "b": "2" }, { "t": 125989, "s": "3" }, { "t": 126183, "b": "2" }, { "t": 126341, "s": "2" }, { "t": 126661, "s": "1" }, { "t": 126878, "b": "1" }, { "t": 127013, "s": "2" }, { "t": 127323, "s": "2" }, { "t": 127637, "s": "2" }, { "t": 127713, "b": "2" }, { "t": 127941, "s": "2" }, { "t": 128267, "s": "2" }, { "t": 128449, "b": "1" }, { "t": 128571, "s": "2" }, { "t": 128875, "s": "3" }, { "t": 129137, "b": "2" }, { "t": 129227, "s": "3" }, { "t": 129444, "b": "2" }, { "t": 129531, "s": "3" }, { "t": 129793, "b": "1" }, { "t": 129840, "s": "2" }, { "t": 130187, "s": "2" }, { "t": 130496, "s": "2" }, { "t": 130497, "b": "2" }, { "t": 130805, "s": "3" }, { "t": 130809, "b": "2" }, { "t": 131125, "s": "2" }, { "t": 131133, "b": "1" }, { "t": 131440, "s": "1" }, { "t": 131709, "b": "2" }, { "t": 131760, "s": "2" }, { "t": 132030, "b": "2" }, { "t": 132069, "s": "3" }, { "t": 132345, "b": "1" }, { "t": 132379, "s": "3" }, { "t": 132688, "s": "3" }, { "t": 133003, "s": "3" }, { "t": 133038, "b": "2" }, { "t": 133323, "s": "2" }, { "t": 133348, "b": "2" }, { "t": 133627, "s": "2" }, { "t": 133713, "b": "1" }, { "t": 133952, "s": "3" }, { "t": 134014, "b": "1" }, { "t": 134368, "s": "3" }, { "t": 134450, "b": "2" }, { "t": 134672, "s": "3" }, { "t": 134981, "s": "2" }, { "t": 135339, "s": "1" }, { "t": 135437, "b": "3" }, { "t": 135648, "s": "1" }, { "t": 135963, "s": "1" }, { "t": 136273, "b": "3" }, { "t": 136283, "s": "1" }, { "t": 136587, "s": "1" }, { "t": 136960, "s": "2" }, { "t": 136961, "b": "3" }, { "t": 137312, "s": "1" }, { "t": 137627, "s": "1" }, { "t": 137718, "b": "3" }, { "t": 137936, "s": "1" }, { "t": 138240, "s": "2" }, { "t": 138393, "b": "3" }, { "t": 138549, "s": "2" }, { "t": 138859, "s": "1" }, { "t": 138957, "b": "1" }, { "t": 139168, "s": "2" }, { "t": 139483, "s": "1" }, { "t": 139642, "b": "2" }, { "t": 139936, "s": "1" }, { "t": 140299, "s": "1" }, { "t": 140422, "b": "1" }, { "t": 140800, "s": "1" }, { "t": 141077, "b": "2" }, { "t": 141163, "s": "2" }, { "t": 141483, "s": "2" }, { "t": 141787, "s": "3" }, { "t": 141937, "b": "1" }, { "t": 142091, "s": "2" }, { "t": 142395, "s": "1" }, { "t": 142626, "b": "2" }, { "t": 142731, "s": "1" }, { "t": 142937, "b": "2" }, { "t": 143035, "s": "2" }, { "t": 143305, "b": "1" }, { "t": 143349, "s": "3" }, { "t": 143653, "s": "3" }, { "t": 143889, "b": "2" }, { "t": 143957, "s": "3" }, { "t": 144202, "b": "2" }, { "t": 144267, "s": "3" }, { "t": 144559, "b": "1" }, { "t": 144581, "s": "3" }, { "t": 144885, "s": "3" }, { "t": 145189, "s": "3" }, { "t": 145253, "b": "2" }, { "t": 145493, "s": "3" }, { "t": 145564, "b": "2" }, { "t": 145797, "s": "3" }, { "t": 145928, "b": "1" }, { "t": 146112, "s": "3" }, { "t": 146246, "b": "1" }, { "t": 146427, "s": "3" }, { "t": 146667, "b": "2" }, { "t": 146789, "s": "3" }, { "t": 147099, "s": "3" }, { "t": 147369, "b": "1" }, { "t": 147408, "s": "3" }, { "t": 147670, "b": "1" }, { "t": 147712, "s": "2" }, { "t": 148018, "b": "2" }, { "t": 148027, "s": "2" }, { "t": 148331, "s": "3" }, { "t": 148645, "s": "3" }, { "t": 148754, "b": "1" }, { "t": 148955, "s": "3" }, { "t": 149074, "b": "1" }, { "t": 149264, "s": "3" }, { "t": 149369, "b": "2" }, { "t": 149579, "s": "2" }, { "t": 149888, "s": "3" }, { "t": 150053, "b": "1" }, { "t": 150192, "s": "3" }, { "t": 150375, "b": "1" }, { "t": 150507, "s": "2" }, { "t": 150761, "b": "2" }, { "t": 150811, "s": "2" }, { "t": 151115, "s": "3" }, { "t": 151419, "s": "3" }, { "t": 151477, "b": "1" }, { "t": 151728, "s": "3" }, { "t": 151784, "b": "1" }, { "t": 152037, "s": "3" }, { "t": 152202, "b": "2" }, { "t": 152341, "s": "3" }, { "t": 152512, "b": "2" }, { "t": 152656, "s": "1" }, { "t": 152937, "b": "1" }, { "t": 153008, "s": "1" }, { "t": 153365, "s": "1" }, { "t": 153665, "b": "3" }, { "t": 153723, "s": "1" }, { "t": 154048, "s": "2" }, { "t": 154405, "s": "1" }, { "t": 154593, "b": "3" }, { "t": 154752, "s": "1" }, { "t": 155109, "s": "1" }, { "t": 155325, "b": "3" }, { "t": 155429, "s": "1" }, { "t": 155813, "s": "1" }, { "t": 156097, "b": "3" }, { "t": 156165, "s": "1" }, { "t": 156533, "s": "1" }, { "t": 156833, "b": "3" }, { "t": 156837, "s": "1" }, { "t": 157563, "s": "1" }, { "t": 157867, "s": "1" }, { "t": 158192, "s": "2" }, { "t": 158457, "b": "1" }, { "t": 158507, "s": "2" }, { "t": 158816, "s": "2" }, { "t": 159120, "s": "1" }, { "t": 159133, "b": "2" }, { "t": 159424, "s": "2" }, { "t": 159739, "s": "1" }, { "t": 159769, "b": "1" }, { "t": 160043, "s": "1" }, { "t": 160347, "s": "2" }, { "t": 160405, "b": "2" }, { "t": 160667, "s": "1" }, { "t": 160981, "s": "2" }, { "t": 161086, "b": "1" }, { "t": 161317, "s": "2" }, { "t": 161627, "s": "1" }, { "t": 161741, "b": "2" }, { "t": 161936, "s": "1" }, { "t": 162261, "s": "2" }, { "t": 162492, "b": "1" }, { "t": 162677, "s": "1" }, { "t": 163061, "s": "1" }, { "t": 163141, "b": "2" }, { "t": 163435, "s": "1" }, { "t": 163467, "b": "2" }, { "t": 163749, "s": "3" }, { "t": 163983, "b": "0" }, { "t": 164053, "s": "3" }, { "t": 164379, "s": "3" }, { "t": 164578, "b": "0" }, { "t": 164683, "s": "2" }, { "t": 164890, "b": "0" }, { "t": 165003, "s": "3" }, { "t": 165253, "b": "0" }, { "t": 165328, "s": "2" }, { "t": 165632, "s": "1" }, { "t": 165905, "b": "1" }, { "t": 165936, "s": "3" }, { "t": 166240, "s": "3" }, { "t": 166544, "s": "3" }, { "t": 166614, "b": "2" }, { "t": 166859, "s": "3" }, { "t": 166946, "b": "2" }, { "t": 167173, "s": "3" }, { "t": 167349, "b": "0" }, { "t": 167477, "s": "3" }, { "t": 167808, "s": "2" }, { "t": 168077, "b": "0" }, { "t": 168171, "s": "2" }, { "t": 168793, "b": "1" }, { "t": 168987, "s": "1" }, { "t": 169107, "b": "1" }, { "t": 169497, "b": "2" }, { "t": 169810, "b": "2" }] }]; var songUnlockLimit = [0, 100, 600]; var specialOrbsTimers = [{ 41851: true, 55488: true, 93720: true, 123260: true, 141216: true }, { 29658: true, 46429: true, 73313: true, 104854: true, 128186: true }, { 24366: true, 49917: true, 84510: true, 105519: true, 120148: true }]; var isDebug = false; var currentTrackIndex = 0; var globalSpeed = 20; var currentRotationAngle = 0; var fullLog = []; var fpsText; var lastTick; var frameCount; var debugText; var worldManager; var backgroundManager; var gateManager; var targetManager; var ball; var runner; var speakerManager; var noteSparks; var scoreLabel; var progressBar; var orbManager; var helpIndicator; var minGateDetectionScale = 0.4; var maxGateDetectionScale = 0.6; var minOrbDetectionScale = 0.3; var maxOrbDetectionScale = 0.8; var borderLimitAngle = Math.PI * 0.08; var gateLimitAngle = Math.PI * 0.2; var gateUniqueId = 0; var songStarted = false; var leftAngle = -Math.PI * 0.5 + gateLimitAngle; var centerAngle = -Math.PI * 0.5 + Math.PI / 2; var rightAngle = -Math.PI * 0.5 + Math.PI - gateLimitAngle; var jumpDistance = -1200; var lastHitSoundTime = 0; var hitSoundCooldown = 100; var skipBeatDelay = 900; var screenWidth = 2048; var thirdWidth = screenWidth / 3; var lastBeatTime = 0; var lastGateHitTime = 0; var gatePenaltyValue = -2; var currentMenuLocks = []; var menuIcon; var hasFinishedTrack01 = storage.hasFinishedTrack01 || false; var lastTapTime = 0; var doubleTapThreshold = 300; // milliseconds var isJumping = false; var jumpHelpShown = false; // Flag to track if the jump help has been shown var globalWhistleParticles = []; var globalWhistleInterval = null; var songHighscore = storage.songHighscore; // Read from storage, defaults handled by plugin import /** * Spawns a looping animation of small black tinted 'note'/'note2' assets * that swing up and then evaporate at the given coordinates. * @param {number} spawnX The x-coordinate for the center of the whistle effect. * @param {number} spawnY The y-coordinate for the center of the whistle effect. */ function whistleAnim(spawnX, spawnY) { // Clear any existing global whistle interval to ensure only one effect runs globally, // or to restart it at a new position if called again. if (globalWhistleInterval !== null) { LK.clearInterval(globalWhistleInterval); } globalWhistleInterval = LK.setInterval(function () { var assetName = Math.random() < 0.5 ? 'note' : 'note2'; //console.log("Spawn WhistleParticle", spawnX, spawnY, assetName); var particle = new WhistleParticle(spawnX, spawnY, assetName); game.addChild(particle); globalWhistleParticles.push(particle); }, 150 + Math.random() * 100); // Spawn a new note every 150-250ms } if (isDebug) { songUnlockLimit = [0, 2, 6]; songListV4 = [{ "name": "Words Fly Fast", "duration": 10000, "songBeats": [{ "t": 1000, "s": "1" }, { "t": 2000, "s": "1" }, { "t": 3000, "b": "3" }, { "t": 4000, "b": "1" }] }, { "name": "Freedom", "duration": 5000, "songBeats": [{ "t": 0, "s": "3" }, { "t": 315, "s": "3" }, { "t": 3218, "b": "1" }, { "t": 3522, "b": "1" }] }, { "name": "Stranger in the Storm", "duration": 5000, "songBeats": [{ "t": 165, "s": "1" }, { "t": 469, "s": "1" }, { "t": 582, "b": "0" }, { "t": 1286, "b": "0" }] }]; specialOrbsTimers = [{ 3000: true, 6000: true }, { 3000: true, 6000: true }, { 3000: true, 6000: true }]; } function getNextGateId() { return gateUniqueId++; } function playHitSound() { var now = Date.now(); if (now - lastHitSoundTime >= hitSoundCooldown) { LK.getSound('hit').play(); lastHitSoundTime = now; } } function gameInitialize() { // Load score from storage LK.setScore(storage.score || 0); worldManager = new WorldManager(); game.addChild(worldManager); backgroundManager = new BackgroundManager(); game.addChild(backgroundManager); gateManager = new GateManager(); game.addChild(gateManager); speakerManager = new SpeakerManager(); game.addChild(speakerManager); noteSparks = new NoteSparks(); game.addChild(noteSparks); orbManager = new OrbManager(); game.addChild(orbManager); ball = new Ball(); ball.x = 1024; ball.y = 2000; ball.alpha = isDebug ? 1 : 0; game.addChild(ball); runner = new Runner(); runner.x = 1024; runner.y = 2000; runner.alpha = 1; game.addChild(runner); scoreLabel = new ScoreLabel(); scoreLabel.y = 80; scoreLabel.visible = false; LK.gui.top.addChild(scoreLabel); progressBar = new ProgressBar(); progressBar.x = 0; progressBar.y = 10; progressBar.visible = false; game.addChild(progressBar); game.updateScore = function () { scoreLabel.updateScore(LK.getScore()); }; menuIcon = new MenuIcon(); menuIcon.x = 1900; menuIcon.y = 150; menuIcon.visible = false; game.addChild(menuIcon); helpIndicator = new HelpIndicator(); game.addChild(helpIndicator); jumpHelpShown = false; // Reset the flag on game initialization if (!songStarted) { // Always show start button first, regardless of completion status var startButton = new StartButton(); game.addChild(startButton); } if (isDebug) { var debugMarker = LK.getAsset('debugMarker', { anchorX: 0.5, anchorY: 0.5, x: 2048 * 0.5, y: 2732 / 2 }); game.addChild(debugMarker); fpsText = new Text2('FPS: 0', { size: 50, fill: 0xFFFFFF }); fpsText.anchor.set(1, 1); LK.gui.bottomRight.addChild(fpsText); lastTick = Date.now(); frameCount = 0; debugText = new Text2('Debug Info', { size: 50, fill: 0xFFFFFF }); debugText.anchor.set(0.5, 0); LK.gui.top.addChild(debugText); } } game.update = function () { // Manage and destroy whistle particles for (var i = globalWhistleParticles.length - 1; i >= 0; i--) { var p = globalWhistleParticles[i]; if (p.shouldDestroy) { // It's good practice for the main game loop to handle destruction p.destroy(); globalWhistleParticles.splice(i, 1); } } if (progressBar && progressBar.update) { progressBar.update(); } if (isDebug) { var now = Date.now(); frameCount++; if (now - lastTick >= 1000) { fpsText.setText('FPS: ' + frameCount); frameCount = 0; lastTick = now; } } }; var snapPositions = { left: 0, center: 1, right: 2 }; var currentSnapPosition = snapPositions.center; var lastMouseZone = 1; function updateSnapPosition(snapPos) { currentSnapPosition = snapPos; var targetAngle = centerAngle; if (snapPos === snapPositions.left) { targetAngle = leftAngle; } else if (snapPos === snapPositions.center) { targetAngle = centerAngle; } else if (snapPos === snapPositions.right) { targetAngle = rightAngle; } var radiusX = 924; var radiusY = 634; runner.x = centerX + radiusX * Math.cos(targetAngle + Math.PI * 0.5); runner.y = centerY + radiusY * Math.sin(targetAngle + Math.PI * 0.5); var rotationMap = { 0: -0.5, 1: 0, 2: 0.5 }; currentRotationAngle = rotationMap[snapPos] * Math.PI * 0.5; } function animateToSnapPosition(snapPos, jump) { var needsIntermediateStep = false; if (currentSnapPosition === snapPositions.left && snapPos === snapPositions.right || currentSnapPosition === snapPositions.right && snapPos === snapPositions.left) { needsIntermediateStep = true; } if (needsIntermediateStep && !jump) { var radiusX = 924; var radiusY = 634; var centerPosX = centerX + radiusX * Math.cos(centerAngle + Math.PI * 0.5); var centerPosY = centerY + radiusY * Math.sin(centerAngle + Math.PI * 0.5); tween(runner, { x: centerPosX, y: centerPosY }, { duration: 100, easing: tween.easeInOut, onFinish: function onFinish() { performSnapAnimation(snapPos, jump); } }); currentRotationAngle = 0; } else { performSnapAnimation(snapPos, jump); } } function performSnapAnimation(snapPos, jump) { currentSnapPosition = snapPos; var targetAngle = centerAngle; if (snapPos === snapPositions.left) { targetAngle = rightAngle; } else if (snapPos === snapPositions.center) { targetAngle = centerAngle; } else if (snapPos === snapPositions.right) { targetAngle = leftAngle; } var radiusX = 924; var radiusY = 634; var targetX = centerX + radiusX * Math.cos(targetAngle + Math.PI * 0.5); var targetY = centerY + radiusY * Math.sin(targetAngle + Math.PI * 0.5); var rotationMap = { 0: -0.5, 1: 0, 2: 0.5 }; var targetRotation = rotationMap[snapPos] * Math.PI * 0.5; // Don't perform lane switching if jumping if (isJumping) { return; } if (jump) { // Calculate jump based on current angle var jumpX = runner.x + jumpDistance * Math.cos(targetAngle); var jumpY = runner.y + jumpDistance * Math.sin(targetAngle); tween(runner, { x: jumpX, y: jumpY }, { duration: 200, easing: tween.easeOut, onFinish: function onFinish() { tween(runner, { x: targetX, y: targetY }, { duration: 200, easing: tween.easeIn }); } }); } else { tween(runner, { x: targetX, y: targetY }, { duration: 300, easing: tween.easeInOut }); } currentRotationAngle = targetRotation; } game.down = function (x, y, obj) { if (!songStarted) { return; } // Check for double tap var currentTime = Date.now(); if (currentTime - lastTapTime < doubleTapThreshold) { // Double tap detected - make runner jump if (!isJumping && runner) { isJumping = true; var originalX = runner.x; var originalY = runner.y; // Calculate jump direction based on current angle var angle = Math.atan2(runner.y - centerY, runner.x - centerX); var jumpX = runner.x + jumpDistance * Math.cos(angle); var jumpY = runner.y + jumpDistance * Math.sin(angle); tween(runner, { x: jumpX, y: jumpY }, { duration: 300, easing: tween.easeOut, onFinish: function onFinish() { tween(runner, { x: originalX, y: originalY }, { duration: 300, easing: tween.easeIn, onFinish: function onFinish() { isJumping = false; } }); } }); } lastTapTime = 0; // Reset to prevent triple tap return; } lastTapTime = currentTime; var tapZone; if (x < thirdWidth) { tapZone = 0; } else if (x < thirdWidth * 2) { tapZone = 1; } else { tapZone = 2; } if (tapZone === 0) { animateToSnapPosition(snapPositions.left); } else if (tapZone === 1) { animateToSnapPosition(snapPositions.center); } else { animateToSnapPosition(snapPositions.right); } lastMouseZone = tapZone; }; game.move = function (x, y, obj) { if (!songStarted) { return; } var currentZone; if (x < thirdWidth) { currentZone = 0; } else if (x < thirdWidth * 2) { currentZone = 1; } else { currentZone = 2; } if (currentZone !== lastMouseZone) { if (currentZone === 0) { animateToSnapPosition(snapPositions.left); } else if (currentZone === 1) { animateToSnapPosition(snapPositions.center); } else { animateToSnapPosition(snapPositions.right); } lastMouseZone = currentZone; } }; function filterSpeakerData(trackIndex) { if (!songListV4[trackIndex]) { return []; } var speakerBeats = []; var songData = songListV4[trackIndex]; if (songData.songBeats) { for (var i = 0; i < songData.songBeats.length; i++) { var beat = songData.songBeats[i]; if (beat.s !== undefined) { speakerBeats.push(beat); } } } return speakerBeats; } function filterGateData(trackIndex) { if (!songListV4[trackIndex]) { return []; } var gateBeats = []; var songData = songListV4[trackIndex]; if (songData.songBeats) { for (var i = 0; i < songData.songBeats.length; i++) { var beat = songData.songBeats[i]; if (beat.b !== undefined) { gateBeats.push(beat); } } } return gateBeats; } function showMenuLock(yPosition, limit) { var lockContainer = new Container(); lockContainer.x = 1024; lockContainer.y = yPosition; game.addChild(lockContainer); var lockChain = lockContainer.addChild(LK.getAsset('lockChain', { anchorX: 0.5, anchorY: 0.5, x: 0, y: 0 })); var lock = lockContainer.addChild(LK.getAsset('lock', { anchorX: 0.5, anchorY: 0.5, x: 0, y: 0 })); var clefDeSol = lockContainer.addChild(LK.getAsset('clefDeSol', { anchorX: 0.5, anchorY: 0.5, x: 0, y: 30, tint: 0x000000, width: 30, height: 60 })); var limitText = new Text2(limit.toString(), { size: 60, fill: 0x000000, dropShadow: true, dropShadowColor: 0x646464, dropShadowBlur: 4, dropShadowAngle: 3 * Math.PI / 4, dropShadowDistance: 4 }); limitText.anchor.set(0.5, 0.5); limitText.x = 0; limitText.y = 110; lockContainer.addChild(limitText); return lockContainer; } function showMenu() { songHighscore = storage.songHighscore; // Refresh from storage to get latest highscores if (globalWhistleInterval !== null) { LK.clearInterval(globalWhistleInterval); globalWhistleInterval = null; } if (runner) { runner.x = 1024; runner.y = 2000; runner.alpha = 0; runner.scaleX = 1; runner.scaleY = 1; runner.isPlayingIdleAnim = false; runner.isReturningToInitial = false; for (var i = 0; i < runner.idleFrameAssets.length; i++) { runner.idleFrameAssets[i].alpha = 0; } for (var i = 0; i < runner.frameAssets.length; i++) { runner.frameAssets[i].alpha = i === 0 ? 1 : 0; } } var menuContainer = new Container(); menuContainer.x = 1024; menuContainer.y = 1366; game.addChild(menuContainer); var menuData = [{ x: 0, y: -780, text: songListV4[0] ? songListV4[0].name : "Track 01" }, { x: 0, y: -80, text: songListV4[1] ? songListV4[1].name : "Track 02" }, { x: 0, y: 620, text: songListV4[2] ? songListV4[2].name : "Track 03" }]; for (var i = 0; i < menuData.length; i++) { var tile = menuContainer.addChild(LK.getAsset('menuTile', { anchorX: 0.5, anchorY: 0.5, x: menuData[i].x, y: menuData[i].y, alpha: 0, scaleX: 0.85, scaleY: 0.58 })); var trackText = new Text2(menuData[i].text, { size: 120, fill: 0xFFFFFF, dropShadow: true, dropShadowColor: 0x000000, dropShadowBlur: 4, dropShadowAngle: Math.PI / 4, dropShadowDistance: 5 }); trackText.anchor.set(0.5, 0.5); trackText.x = menuData[i].x; trackText.y = menuData[i].y - 40; menuContainer.addChild(trackText); var highScore = songHighscore[i] || 0; // Use refreshed songHighscore var highScoreText = new Text2('Best: ' + highScore, { size: 70, fill: 0xFFFFFF, // Yellow for highscore text dropShadow: true, dropShadowColor: 0x000000, dropShadowBlur: 3, dropShadowAngle: Math.PI / 4, dropShadowDistance: 3, alpha: 0, // Start hidden, will be tweened in visible: !!highScore }); highScoreText.anchor.set(0.5, 0.5); highScoreText.x = menuData[i].x; highScoreText.y = menuData[i].y + 110; // Position it below the track name menuContainer.addChild(highScoreText); (function (menuTile, menuText, highScoreTextDisplay, delay, trackIndex) { // Added highScoreTextDisplay var currentScore = LK.getScore(); var theHighScore = songHighscore[0] + songHighscore[1] + songHighscore[2]; var isLocked = theHighScore < songUnlockLimit[trackIndex]; LK.setTimeout(function () { tween(menuTile, { alpha: 1, scaleX: 0.85, scaleY: 0.58 }, { duration: 800, easing: tween.easeOut }); tween(menuText, { alpha: 1 }, { duration: 800, easing: tween.easeOut }); if (isLocked) { var lock = showMenuLock(menuContainer.y + menuData[trackIndex].y, songUnlockLimit[trackIndex]); currentMenuLocks.push(lock); highScoreTextDisplay.visible = false; } else { tween(highScoreTextDisplay, { // highScoreTextDisplay is the passed highScoreText alpha: 1 }, { duration: 800, easing: tween.easeOut }); } }, delay); menuTile.down = function () { if (isLocked) { return; } // Hide all visible lockContainers for (var j = 0; j < currentMenuLocks.length; j++) { if (currentMenuLocks[j]) { currentMenuLocks[j].visible = false; } } LK.setScore(0); storage.score = 0; // Persist current score as 0 if (game.updateScore) { game.updateScore(); } // Update currentTrackIndex currentTrackIndex = trackIndex; // Reset all game managers and objects if (gateManager) { // Stop all existing gates for (var g = gateManager.gates.length - 1; g >= 0; g--) { gateManager.gates[g].destroy(); } gateManager.gates = []; // Reset gate manager state if (songListV4[trackIndex]) { gateManager.currentSong = songListV4[trackIndex]; gateManager.gateBeats = filterGateData(trackIndex); } gateManager.currentNoteIndex = 0; gateManager.lastGateAngle = null; gateManager.gateAnimStartTime = Date.now(); } if (orbManager) { // Destroy all existing orbs for (var o = orbManager.orbs.length - 1; o >= 0; o--) { orbManager.orbs[o].destroy(); } orbManager.orbs = []; orbManager.lastOrbSpawnTime = 0; } if (ball) { // Reset ball state ball.lastIntersectingGates = {}; ball.lastIntersectingOrbs = {}; } if (runner) { // Reset runner position and state runner.x = 1024; runner.y = 2000; runner.rotation = 0; runner.isReturningToInitial = false; runner.shouldStartIdleAfterReturn = false; runner.isPlayingIdleAnim = false; runner.isPlayingWaitingAnim = false; // Reset runner animations for (var i = 0; i < runner.frameAssets.length; i++) { runner.frameAssets[i].alpha = i === 0 ? 1 : 0; } for (var i = 0; i < runner.idleFrameAssets.length; i++) { runner.idleFrameAssets[i].alpha = 0; } } // Reset global game state currentSnapPosition = snapPositions.center; lastMouseZone = 1; currentRotationAngle = 0; isJumping = false; lastGateHitTime = 0; gatePenaltyValue = -2; lastBeatTime = 0; if (speakerManager) { for (var k = speakerManager.speakers.length - 1; k >= 0; k--) { var oldSpeaker = speakerManager.speakers[k]; tween.stop(oldSpeaker); if (oldSpeaker && typeof oldSpeaker.destroy === 'function') { oldSpeaker.destroy(); } } speakerManager.speakers = []; if (songListV4[trackIndex]) { speakerManager.speakerSongData = songListV4[trackIndex]; speakerManager.speakerBeats = filterSpeakerData(trackIndex); } speakerManager.currentBeatIndex = 0; } if (worldManager) { worldManager.loadWorldAssets(trackIndex); } var musicTrack = songTracks[trackIndex]; if (musicTrack) { tween(menuContainer, { alpha: 0 }, { duration: 500, easing: tween.easeOut, onFinish: function onFinish() { menuContainer.destroy(); var songStartTime = Date.now(); if (menuIcon && hasFinishedTrack01) { menuIcon.visible = true; } if (gateManager) { gateManager.songStartTime = songStartTime; } if (speakerManager) { speakerManager.songStartTime = songStartTime; } if (orbManager) { orbManager.loadSpecialOrbsTimers(); } if (helpIndicator) { helpIndicator.reset(); } jumpHelpShown = false; // Reset the flag when showing the menu if (scoreLabel) { scoreLabel.visible = true; } if (progressBar) { progressBar.visible = true; progressBar.startProgressAnimation(); } if (runner) { for (var i = 0; i < runner.idleFrameAssets.length; i++) { runner.idleFrameAssets[i].alpha = 0; } runner.alpha = 1; } songStarted = true; LK.playMusic(musicTrack); } }); } }; })(tile, trackText, highScoreText, i * 200, i); // Pass highScoreText to the IIFE } } gameInitialize();
===================================================================
--- original.js
+++ change.js
@@ -460,13 +460,13 @@
});
var GateManager = Container.expand(function () {
var self = Container.call(this);
self.gates = [];
- self.gateAnimStartTime = Date.now();
+ self.gateAnimStartTime = 0;
self.gateAnimationSpeed = globalSpeed / 1000;
self.currentSong = songListV4[0];
self.gateBeats = filterGateData(0);
- self.songStartTime = Date.now();
+ self.songStartTime = 0;
self.currentNoteIndex = 0;
self.noteSpawnScale = 0.12;
self.lastGateAngle = null;
self.lastProcessedBeat = -1;
@@ -1967,9 +1967,8 @@
}
});
return;
}
- songStarted = true;
// Stop the pulse animation when pressed
tween.stop(self.buttonBg);
tween(self, {
alpha: 0
@@ -1982,11 +1981,13 @@
LK.playMusic('track_test');
} else {
LK.playMusic('track_01');
}
+ songStarted = true;
if (gateManager) {
- gateManager.songStartTime = songStartTime;
- gateManager.currentBeatIndex = 0;
+ //gateManager.songStartTime = songStartTime;
+ //gateManager.currentBeatIndex = 0;
+ gateManager.resetSong();
}
if (speakerManager) {
speakerManager.songStartTime = songStartTime;
speakerManager.currentBeatIndex = 0;
@@ -2259,20 +2260,14 @@
}, {
"t": 443,
"s": "1"
}, {
- "t": 651,
- "b": "1"
- }, {
"t": 747,
"s": "1"
}, {
"t": 1232,
"s": "1"
}, {
- "t": 1256,
- "b": "1"
- }, {
"t": 1579,
"s": "1"
}, {
"t": 1800,
@@ -9008,9 +9003,9 @@
"t": 169810,
"b": "2"
}]
}];
-var songUnlockLimit = [0, 100, 400];
+var songUnlockLimit = [0, 100, 600];
var specialOrbsTimers = [{
41851: true,
55488: true,
93720: true,
@@ -9064,8 +9059,10 @@
var jumpDistance = -1200;
var lastHitSoundTime = 0;
var hitSoundCooldown = 100;
var skipBeatDelay = 900;
+var screenWidth = 2048;
+var thirdWidth = screenWidth / 3;
var lastBeatTime = 0;
var lastGateHitTime = 0;
var gatePenaltyValue = -2;
var currentMenuLocks = [];
@@ -9414,10 +9411,8 @@
lastTapTime = 0; // Reset to prevent triple tap
return;
}
lastTapTime = currentTime;
- var screenWidth = 2048;
- var thirdWidth = screenWidth / 3;
var tapZone;
if (x < thirdWidth) {
tapZone = 0;
} else if (x < thirdWidth * 2) {
@@ -9437,10 +9432,8 @@
game.move = function (x, y, obj) {
if (!songStarted) {
return;
}
- var screenWidth = 2048;
- var thirdWidth = screenWidth / 3;
var currentZone;
if (x < thirdWidth) {
currentZone = 0;
} else if (x < thirdWidth * 2) {
@@ -9458,9 +9451,8 @@
}
lastMouseZone = currentZone;
}
};
-game.up = function (x, y, obj) {};
function filterSpeakerData(trackIndex) {
if (!songListV4[trackIndex]) {
return [];
}
@@ -9591,9 +9583,9 @@
dropShadowDistance: 5
});
trackText.anchor.set(0.5, 0.5);
trackText.x = menuData[i].x;
- trackText.y = menuData[i].y;
+ trackText.y = menuData[i].y - 40;
menuContainer.addChild(trackText);
var highScore = songHighscore[i] || 0; // Use refreshed songHighscore
var highScoreText = new Text2('Best: ' + highScore, {
size: 70,
@@ -9609,14 +9601,14 @@
visible: !!highScore
});
highScoreText.anchor.set(0.5, 0.5);
highScoreText.x = menuData[i].x;
- highScoreText.y = menuData[i].y + 120; // Position it below the track name
+ highScoreText.y = menuData[i].y + 110; // Position it below the track name
menuContainer.addChild(highScoreText);
(function (menuTile, menuText, highScoreTextDisplay, delay, trackIndex) {
// Added highScoreTextDisplay
var currentScore = LK.getScore();
- var theHighScore = Math.max(0, songHighscore[0], songHighscore[1], songHighscore[2]);
+ var theHighScore = songHighscore[0] + songHighscore[1] + songHighscore[2];
var isLocked = theHighScore < songUnlockLimit[trackIndex];
LK.setTimeout(function () {
tween(menuTile, {
alpha: 1,
remove background
remove background
Futuristic speaker in the shape of a white orb. Face view
white video camera icon
landscape of a furturistic world by night
a white music note
white sparkles emiting from the center. back background
clean red-violet beam from above
button in the shape of a protorealistic holographic futuristc Rectangle . Front view.
above the clouds by a bright night, no visible moon Photorealistic
White Clef de sol
A 20 nodes straight metalic lock chain. High definition. In-Game asset. 2d. High contrast. No shadows
a closed metalic padlock. No visible key hole.
white menu icon
in white