您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
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.
- // ==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);
- })();