(function () { "use strict";
// ── CONFIG ────────────────────────────────────────────────── const AUTO_RESTART = true; const RESTART_DELAY = 800; // ms before auto-restart after death const MUTE_SOUND = true; // silence during autoplay const SIM_FRAMES = 350; // max frames to simulate per check // ──────────────────────────────────────────────────────────── let running = true; let totalGames = 0; let botBest = 0; let scores = []; if (MUTE_SOUND && typeof snd !== "undefined") snd = false; function wouldHitTarget() { if (st !== 1 || !bl || !bl.orb) return false; var targets = []; for (var i = cWI + 1; i < Math.min(wl.length, cWI + 3); i++) { if (wl[i] && !wl[i].caught) targets.push(wl[i]); } if (targets.length === 0) return false; var ta = bl.angle + bl.dir * Math.PI / 2; var nw = wl[cWI + 1]; var spd; if (nw) { var ddx = nw.x - bl.x, ddy = nw.y - bl.y; spd = Math.max(4.5, Math.min(7.5, Math.sqrt(ddx * ddx + ddy * ddy) * 0.038)); } else { spd = 5.5; } var x = bl.x, y = bl.y; var vx = Math.cos(ta) * spd; var vy = Math.sin(ta) * spd; for (var f = 0; f < SIM_FRAMES; f++) { vy += 0.06; vx *= 0.995; vy *= 0.995; x += vx; y += vy; for (var t = 0; t < targets.length; t++) { var dx = x - targets[t].x, dy = y - targets[t].y; if (Math.sqrt(dx * dx + dy * dy) < targets[t].radius + 20) { return true; } } if (y > 2500 || x < -400 || x > W + 400) return false; } return false; } function autoRestart() { if (st !== 2) return; var go = document.getElementById("game-over"); var rp = document.getElementById("revive-popup"); if (go) go.classList.add("hidden"); if (rp) rp.classList.add("hidden"); document.getElementById("pause-btn").style.display = "flex"; document.getElementById("sound-btn").style.display = "flex"; st = 1; init(); } function tick() { if (!running) return; if (st === 0) { handleTap(); } else if (st === 2 && AUTO_RESTART) { totalGames++; scores.push(sc); if (sc > botBest) botBest = sc; console.log( "Game #" + totalGames + " | Score: " + sc + " | Jumps: " + jmp + " | Combo peak: " + cc + " | Bot best: " + botBest ); setTimeout(autoRestart, RESTART_DELAY); setTimeout(function () { requestAnimationFrame(tick); }, RESTART_DELAY + 50); return; } else if (st === 1 && bl && bl.orb) { if (wouldHitTarget()) { release(); } } requestAnimationFrame(tick); } window.stopBot = function () { running = false; console.log("Bot paused. Call startBot() to resume."); }; window.startBot = function () { if (running) return; running = true; console.log("Bot resumed."); requestAnimationFrame(tick); }; window.botStatus = function () { var avg = scores.length ? (scores.reduce(function (a, b) { return a + b; }, 0) / scores.length).toFixed(1) : 0; console.log( "Games: " + totalGames + " | Best: " + botBest + " | Avg: " + avg + " | Running: " + running ); }; console.log("=== STARFLING AUTO-PLAYER ==="); console.log("Controls: stopBot() | startBot() | botStatus()"); requestAnimationFrame(tick);
(function () { "use strict";
})();