Code edit (2 edits merged)
Please save this source code
User prompt
Donโt show jump help again when spawning special orb if it has been shown before.
User prompt
in HelpIndicator, instead of calling showHelpJump when `elapsed >= 45000`, call it when spawning first Special Orb
Code edit (5 edits merged)
Please save this source code
User prompt
Animate StartButton entrance from scale 0 to 1 in 3sec (not clickable until entrance anim ends) โช๐ก Consider importing and using the following plugins: @upit/tween.v1
Code edit (1 edits merged)
Please save this source code
User prompt
in HelpIndicator, use song start time instead of Date.now() for gameStartTime,
Code edit (3 edits merged)
Please save this source code
User prompt
in showHelpJump, animate helpJumpGraphic scale quicky to indiquate a double tap โช๐ก Consider importing and using the following plugins: @upit/tween.v1
Code edit (4 edits merged)
Please save this source code
User prompt
in showHelpMove, make the helpMoveGraphic move back and forth horizontally โช๐ก Consider importing and using the following plugins: @upit/tween.v1
Code edit (3 edits merged)
Please save this source code
User prompt
create a new class Helpindicator that will temporarly show help move avec 2000ms and gelpJump after 25000ms โช๐ก Consider importing and using the following plugins: @upit/tween.v1
Code edit (2 edits merged)
Please save this source code
User prompt
after using the ingame menu button we see the menu, if we select a menu tile, game & song isn't reset to the begining. Ensure to reset the game properly when starting again after using the ingame menu button
Code edit (1 edits merged)
Please save this source code
User prompt
Ensure that when song start from startButton or Menu the runner is set to visible
User prompt
when StartButton, if hasFinishedTrack01, show menu instead of starting a song
Code edit (1 edits merged)
Please save this source code
User prompt
if hasFinishedTrack01, Hide menu until start is pressed
User prompt
Now even if hasFinishedTrack01 == true, show start button before Menu
User prompt
Now when menu is shown, hide the runner
Code edit (1 edits merged)
Please save this source code
Code edit (8 edits merged)
Please save this source code
User prompt
in StartButton, add a second start asset names self.buttonPulse and make it pusle (anim scale to 1.1 and its alpha) โช๐ก Consider importing and using the following plugins: @upit/tween.v1
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); var storage = LK.import("@upit/storage.v1", { score: 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 = Date.now(); self.gateAnimationSpeed = globalSpeed / 1000; self.currentSong = songListV4[0]; self.gateBeats = filterGateData(0); self.songStartTime = Date.now(); 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) { 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 }); } }); } }); }; 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('start2', { anchorX: 0.5, anchorY: 0.5 }); self.buttonPulse = self.attachAsset('start', { anchorX: 0.5, anchorY: 0.5 }); self.buttonPulse.alpha = 1.0; // Start slightly transparent self.buttonPulse.scaleX = 0.9; // Start slightly smaller self.buttonPulse.scaleY = 0.9; // Start slightly smaller 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; // Entrance animation from scale 0 to 1 over 3 seconds tween(self, { scaleX: 1, scaleY: 1 }, { duration: 3000, easing: tween.easeOut, onFinish: function onFinish() { self.isEntranceComplete = true; } }); // Pulse animation for buttonPulse var _pulse = function pulse() { tween(self.buttonPulse, { scaleX: 1.0, scaleY: 1.0, alpha: 1.0 }, { duration: 1200, easing: tween.easeOut, onFinish: function onFinish() { tween(self.buttonPulse, { scaleX: 0.9, scaleY: 0.9, alpha: 0.8 }, { duration: 1200, easing: tween.easeIn, onFinish: _pulse }); } }); }; _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 if (hasFinishedTrack01) { // Stop the pulse animation when pressed tween.stop(self.buttonPulse); tween(self, { alpha: 0 }, { duration: 500, easing: tween.easeOut, onFinish: function onFinish() { self.destroy(); showMenu(); } }); return; } songStarted = true; // Stop the pulse animation when pressed tween.stop(self.buttonPulse); 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'); } if (gateManager) { gateManager.songStartTime = songStartTime; gateManager.currentBeatIndex = 0; } 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": 651, "b": "1" }, { "t": 747, "s": "1" }, { "t": 1232, "s": "1" }, { "t": 1256, "b": "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, 500]; 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 lastBeatTime = 0; var lastGateHitTime = 0; var gatePenaltyValue = -2; var currentMenuLocks = []; var menuIcon; var hasFinishedTrack01 = false; // TEMP DEBUG 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; /** * 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 = 1948; menuIcon.y = 55; menuIcon.visible = false; // Show menu icon if track01 has been completed and we're showing menu first if (hasFinishedTrack01 && !songStarted) { menuIcon.visible = true; } 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 screenWidth = 2048; var thirdWidth = screenWidth / 3; 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 screenWidth = 2048; var thirdWidth = screenWidth / 3; 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; } }; game.up = function (x, y, obj) {}; 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() { if (globalWhistleInterval !== null) { LK.clearInterval(globalWhistleInterval); globalWhistleInterval = null; } // Ensure menuIcon is visible when showing menu if (menuIcon && hasFinishedTrack01) { menuIcon.visible = true; } 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; menuContainer.addChild(trackText); (function (menuTile, menuText, delay, trackIndex) { var currentScore = LK.getScore(); var isLocked = currentScore < 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); } }, 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; } } // 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, i * 200, i); } } gameInitialize(); // Show menu icon if track01 has been completed and we're showing menu first if (hasFinishedTrack01 && !songStarted) { menuIcon.visible = true; } game.addChild(menuIcon);
===================================================================
--- original.js
+++ change.js
@@ -1836,9 +1836,9 @@
return self;
});
var StartButton = Container.expand(function () {
var self = Container.call(this);
- self.buttonBg = self.attachAsset('start', {
+ self.buttonBg = self.attachAsset('start2', {
anchorX: 0.5,
anchorY: 0.5
});
self.buttonPulse = self.attachAsset('start', {
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