60fps bugfix

Literally the best mod ever made. Makes 60fps not only playable, it feels exactly the same as 240fps while *reducing* lag and ping instead of increasing it. Fullscreen recommended. Keywords: starblast.io starblast dueling mod fps bypass unlock uncap if you want more than 60fps, please instead use this mod, it'll solve all your problems.

Na nainštalovanie skriptu si budete musieť nainštalovať rozšírenie, ako napríklad Tampermonkey, Greasemonkey alebo Violentmonkey.

Na nainštalovanie skriptu si budete musieť nainštalovať rozšírenie, ako napríklad Tampermonkey, % alebo Violentmonkey.

Na nainštalovanie skriptu si budete musieť nainštalovať rozšírenie, ako napríklad Tampermonkey, % alebo Violentmonkey.

Na nainštalovanie skriptu si budete musieť nainštalovať rozšírenie, ako napríklad Tampermonkey alebo Userscripts.

Na inštaláciu tohto skriptu je potrebné nainštalovať rozšírenie, ako napríklad Tampermonkey.

Na inštaláciu tohto skriptu je potrebné nainštalovať rozšírenie správcu používateľských skriptov.

(Už mám správcu používateľských skriptov, nechajte ma ho nainštalovať!)

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie, ako napríklad Stylus.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie, ako napríklad Stylus.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie, ako napríklad Stylus.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie správcu používateľských štýlov.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie správcu používateľských štýlov.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie správcu používateľských štýlov.

(Už mám správcu používateľských štýlov, nechajte ma ho nainštalovať!)

// ==UserScript==
// @name         60fps bugfix
// @namespace    http://tampermonkey.net/
// @version      2.113
// @description  Literally the best mod ever made. Makes 60fps not only playable, it feels exactly the same as 240fps while *reducing* lag and ping instead of increasing it. Fullscreen recommended. Keywords: starblast.io starblast dueling mod fps bypass unlock uncap if you want more than 60fps, please instead use this mod, it'll solve all your problems.
// @author       ✨Stardust™
// @match        *://starblast.io/*
// @exclude      *://starblast.io/modding.html*
// @exclude      *://starblast.io/shipeditor*
// @grant        none
// @license      MIT
// ==/UserScript==

(function() {
    'use strict';

    // URL for your modified index.html file
    const modifiedIndexUrl = 'https://raw.githubusercontent.com/StardustSDF/60fps-bugfix-starblast/main/index.html';
    // The above URL includes lowercase name mod, as well as the following altercation to the game code:
    // e.prototype.lII0O=function(t){var e,i,s;let now=Date.now();if(now-lastTime<1000/20){clearTimeout(this.stopTimer);this.stopTimer=setTimeout(()=>{i=(t.clientX-this.element.offsetLeft)*this.l01II,s=(t.clientY-this.element.offsetTop)*this.l01II,this.mousepressed?this.O01lI(i,s,"mouse"):this.mouseMove(i,s,"mouse"),this.control_listener&&this.control_listener.mouseMove(i,s,t);},50);return!1;}lastTime=now;t.preventDefault(),i=(t.clientX-this.element.offsetLeft)*this.l01II,s=(t.clientY-this.element.offsetTop)*this.l01II,e=this.mousepressed?this.O01lI(i,s,"mouse"):this.mouseMove(i,s,"mouse"),e||null!=this.control_listener&&this.control_listener.mouseMove(i,s,t),clearTimeout(this.stopTimer),this.stopTimer=setTimeout(()=>{i=(t.clientX-this.element.offsetLeft)*this.l01II,s=(t.clientY-this.element.offsetTop)*this.l01II,this.mousepressed?this.O01lI(i,s,"mouse"):this.mouseMove(i,s,"mouse"),this.control_listener&&this.control_listener.mouseMove(i,s,t);},50),!1},
    // and let lastTime = 0; at the beginning of the main js for the game
    function applyModifiedIndex() {
        fetch(modifiedIndexUrl)
            .then(response => {
                if (response.ok) {
                    return response.text();
                } else {
                    throw new Error('An error? In my userscript?!');
                }
            })
            .then(html => {
                document.open();
                document.write(html);
                document.close();
                applyCustomCursor();
            })
            .catch(error => {
                console.error('An error? In my userscript?!:', error);
            });
    }

    function applyCustomCursor() {
        const cursorTrailCount = 2;
        const trailElements = [];
        const trailDelay = 5;
        const edgeThreshold = 3;

        for (let i = 0; i < cursorTrailCount; i++) {
            const trail = document.createElement('div');
            trail.style.position = 'fixed';
            trail.style.width = '24px';
            trail.style.height = '24px';
            trail.style.backgroundImage = 'url(https://raw.githubusercontent.com/StardustSDF/60fps-bugfix-starblast/main/crosshair4.png)';
            trail.style.backgroundSize = 'contain';
            trail.style.pointerEvents = 'none';
            trail.style.opacity = '1';
            trail.style.transform = 'translate(-50%, -50%)';
            trail.style.zIndex = '69420';
            document.body.appendChild(trail);
            trailElements.push(trail);
        }

        let mouseX = 0, mouseY = 0;
        let trailPositions = Array(cursorTrailCount).fill({ x: 0, y: 0 });

        function updateCursorTrail() {
            trailPositions = [{ x: mouseX, y: mouseY }, ...trailPositions.slice(0, cursorTrailCount - 1)];

            trailElements.forEach((trail, index) => {
                setTimeout(() => {
                    trail.style.left = `${trailPositions[index].x}px`;
                    trail.style.top = `${trailPositions[index].y}px`;

                    if (
                        trailPositions[index].x <= edgeThreshold ||
                        trailPositions[index].x >= window.innerWidth - edgeThreshold ||
                        trailPositions[index].y <= edgeThreshold ||
                        trailPositions[index].y >= window.innerHeight - edgeThreshold
                    ) {
                        trail.style.opacity = '0';
                    } else {
                        trail.style.opacity = '1';
                    }
                }, index * trailDelay);
            });

            requestAnimationFrame(updateCursorTrail);
        }

        updateCursorTrail();

        window.addEventListener('mousemove', (event) => {
            mouseX = event.clientX;
            mouseY = event.clientY;
        });

        const style = document.createElement('style');
        style.innerHTML = `
            * {
                cursor: none !important;
            }
            .sbg-crosshair {
                visibility: visible !important;
            }
        `;
        document.head.appendChild(style);
    }

    window.addEventListener('load', applyModifiedIndex);
})();