// ==UserScript==
// @name Circle hitboxes - Sploop
// @namespace http://tampermonkey.net/
// @version 2024-04-30
// @description Accurate Circle Hitboxes For PvP in Sploop.io!
// @author fizzixww
// @match https://sploop.io/
// @icon https://www.google.com/s2/favicons?sz=64&domain=sploop.io
// @grant none
// @license MIT
// ==/UserScript==
const hitbox_Circle_Colour = "#ff0000"; //Choose the colour of the hitboxes! (search Hex Colour Picker in google)
const Remove_weird_circle_above_animals = 0; //(not recommended) Set this to 1 to remove the weird looking circle above animals. however, you will not be able to see other players hitboxes if you do this.
//Code derived from Nudos visual extention.
(function() {
class Visuals {
constructor() {
this.text = {
color: {
all: "#fff",
rainbow: false
},
visible: 1
};
this.hi = {
active: true,
disttag: true,
dashline: false,
color: {
entity: "#cc5151",
ally: "#a4cc4f",
rainbow: false
},
size: 1,
visible: 1
};
this.hitboxes = {
active: false,
dashline: false,
color: {
all: "#5174cd",
rainbow: false
},
size: 1,
visible: 1
};
this.rainbow = {
old: Date.now(),
hue: 0,
power: 3,
time: 10
};
this.offset = [0, Date.now()];
}
rainbowColor() {
if (!this.rainbow.old || Date.now() - this.rainbow.old >= this.rainbow.time) {
this.rainbow.hue += this.rainbow.power * Math.random();
this.rainbow.old = Date.now();
}
visuals.rb = `hsl(${this.rainbow.hue}, 100%, 50%)`;
}
drawText(text, x, y) {
Context.save();
Context.font = '18px "Baloo Paaji"';
Context.lineWidth = 8;
Context.strokeStyle = "#3d3f42";
Context.globalAlpha = this.text.visible;
Context.textAlign = 'center';
Context.fillStyle = this.text.color.rainbow ? visuals.rb : this.text.color.all;
Context.strokeText(text, x, y);
Context.fillText(text, x, y);
Context.restore();
}
updateOffset() {
if (!this.offset[1] || Date.now() - this.offset[1] >= 10) {
this.offset[0]++;
this.offset[1] = Date.now();
}
}
dashLine() {
Context.setLineDash([18, 6, 6, 6]);
Context.lineDashOffset = -visuals.offset[0];
}
}
let visuals = new Visuals();
class fizzBurger {
constructor() {
this.allAlly = [];
this.allEntity = [];
this.localPlayer = {
active: false,
positions: [],
maxPositions: 50 //amount
};
}
drawCircle(x, y, imgWidth, imgHeight, rotation, rad) {
const radius = rad;
const offset = -radius;
const centerX = x + imgWidth / 2;
const centerY = y + imgHeight / 2;
const rotatedX = centerX + (radius + offset) * Math.cos(rotation);
const rotatedY = centerY + (radius + offset) * Math.sin(rotation);
Context.save();
Context.beginPath();
Context.arc(rotatedX, rotatedY, radius, 0, 2 * Math.PI);
Context.lineWidth = 2;
Context.strokeStyle = hitbox_Circle_Colour;
Context.stroke();
Context.restore();
}
updatePositions(x, y) {
this.localPlayer.positions.push({
x,
y
});
if (this.localPlayer.positions.length > this.localPlayer.maxPositions) {
this.localPlayer.positions.shift();
}
}
drawAllCircles() {
this.allEntity.forEach(({
x,
y,
imgWidth,
imgHeight,
rotation
}) => {
this.drawCircle(x, y, imgWidth, imgHeight, rotation);
});
}
}
let QuickQuix = new fizzBurger();
let Context;
let {
clearRect,
fillRect,
fillText,
drawImage
} = CanvasRenderingContext2D.prototype;
CanvasRenderingContext2D.prototype.clearRect = function(x, y, width, height) {
if (this.canvas.id === "game-canvas") {
Context = this.canvas.getContext("2d");
}
return clearRect.apply(this, arguments);
};
CanvasRenderingContext2D.prototype.fillRect = function(x, y, width, height) {
if (document.getElementById("homepage").style.display == "none") {
visuals.updateOffset();
if (this.fillStyle == "#a4cc4f") {}
} else {
QuickQuix.localPlayer.active = false;
}
return fillRect.apply(this, arguments);
};
const imageRadii = {
"https://sploop.io/img/entity/tree.png?v=1923912": 90,
"https://sploop.io/img/entity/rock.png?v=1923912": 75,
"https://sploop.io/img/entity/cherry_tree.png?v=1923912": 90,
"https://sploop.io/img/entity/gold.png?v=1923912": 76,
"https://sploop.io/img/entity/hard_spike.png?v=1923912": 45,
"https://sploop.io/img/entity/spike.png?v=1923912": 45,
"https://sploop.io/img/entity/wall.png?v=1923912": 45,
"https://sploop.io/img/entity/platform.png?v=1923912": 60,
"https://sploop.io/img/entity/boost.png?v=1923912": 40,
"https://sploop.io/img/entity/lootbox.png?v=1923912": 40,
"https://sploop.io/img/entity/windmill_base.png?v=1923912": 45,
"https://sploop.io/img/entity/windmill_top.png?v=1923912": 54,
"https://sploop.io/img/entity/bed.png?v=1923912": 50,
"https://sploop.io/img/entity/castle_spike.png?v=1923912": 42,
"https://sploop.io/img/entity/tornado.png?v=1923912": 220,
"https://sploop.io/img/entity/cactus.png?v=1923912": 50,
"https://sploop.io/img/entity/bush.png?v=1923912": 50,
"https://sploop.io/img/entity/roof.png?v=1923912": 50,
"https://sploop.io/img/entity/chest.png?v=1923912": 45,
"https://sploop.io/img/entity/turret_base.png?v=1923912": 45,
"https://sploop.io/img/entity/cow.png?v=1923912": 90,
"https://sploop.io/img/entity/trap.png?v=1923912": 40,
"https://sploop.io/img/entity/wood_farm.png?v=1923912": 80,
"https://sploop.io/img/entity/shark.png?v=1923912": 90,
"https://sploop.io/img/entity/castle_wall.png?v=1923912": 59,
"https://sploop.io/img/entity/wolf.png?v=1923912": 50,
"https://sploop.io/img/entity/berry_farm.png?v=1923912": 50,
"https://sploop.io/img/entity/gcow.png?v=1923912": 90,
"https://sploop.io/img/entity/palm_tree.png?v=1923912": 90,
"https://sploop.io/img/entity/cave_stone0.png?v=1923912": 92,
"https://sploop.io/img/entity/cave_stone1.png?v=1923912": 92,
"https://sploop.io/img/entity/cave_stone2.png?v=1923912": 58,
"https://sploop.io/img/entity/fireball.png?v=1923912": 100,
"https://sploop.io/img/entity/ice0.png?v=1923912": 92,
"https://sploop.io/img/entity/ice1.png?v=1923912": 20,
"https://sploop.io/img/entity/teleporter.png?v=1923912": 35,
"https://sploop.io/img/entity/duck.png?v=1923912": 20,
"https://sploop.io/img/entity/mammoth_body.png?v=1923912": 90,
"https://sploop.io/img/entity/dragon_2_body.png?v=1923912": 100,
"https://sploop.io/img/entity/wood_farm_cherry.png?v=1923912": 80,
"https://sploop.io/img/entity/wood_farm.png?v=1923912": 80,
"https://sploop.io/img/entity/ruby.png?v=1923912": 100,
"https://sploop.io/img/skins/body0.png?v=1923912": 35,
"https://sploop.io/img/skins/body1.png?v=1923912": 35,
"https://sploop.io/img/skins/body2.png?v=1923912": 35,
"https://sploop.io/img/skins/body3.png?v=1923912": 35,
"https://sploop.io/img/skins/body4.png?v=1923912": 35,
"https://sploop.io/img/skins/body5.png?v=1923912": 35,
"https://sploop.io/img/skins/body6.png?v=1923912": 35,
"https://sploop.io/img/skins/body7.png?v=1923912": 35,
"https://sploop.io/img/skins/body8.png?v=1923912": 35,
"https://sploop.io/img/skins/body9.png?v=1923912": 35,
"https://sploop.io/img/skins/body10.png?v=1923912": 35,
"https://sploop.io/img/skins/body11.png?v=1923912": 35,
"https://sploop.io/img/skins/body12.png?v=1923912": 35,
"https://sploop.io/img/skins/body13.png?v=1923912": 35,
"https://sploop.io/img/skins/body14.png?v=1923912": 35,
"https://sploop.io/img/skins/body15.png?v=1923912": 35,
"https://sploop.io/img/skins/body16.png?v=1923912": 35,
"https://sploop.io/img/skins/body17.png?v=1923912": 35,
"https://sploop.io/img/skins/body18.png?v=1923912": 35,
"https://sploop.io/img/skins/body19.png?v=1923912": 35,
"https://sploop.io/img/skins/body20.png?v=1923912": 35,
"https://sploop.io/img/skins/body21.png?v=1923912": 35,
"https://sploop.io/img/skins/body22.png?v=1923912": 35,
"https://sploop.io/img/skins/body23.png?v=1923912": 35,
"https://sploop.io/img/skins/body24.png?v=1923912": 35,
"https://sploop.io/img/skins/body25.png?v=1923912": 35,
"https://sploop.io/img/skins/body26.png?v=1923912": 35,
"https://sploop.io/img/skins/body27.png?v=1923912": 35,
"https://sploop.io/img/skins/body28.png?v=1923912": 35,
"https://sploop.io/img/skins/body29.png?v=1923912": 35,
"https://sploop.io/img/skins/body30.png?v=1923912": 35,
"https://sploop.io/img/skins/body31.png?v=1923912": 35,
"https://sploop.io/img/skins/body32.png?v=1923912": 35,
"https://sploop.io/img/skins/body33.png?v=1923912": 35,
"https://sploop.io/img/skins/body34.png?v=1923912": 35,
"https://sploop.io/img/skins/body35.png?v=1923912": 35,
"https://sploop.io/img/skins/body36.png?v=1923912": 35,
"https://sploop.io/img/skins/body37.png?v=1923912": 35,
"https://sploop.io/img/skins/body38.png?v=1923912": 35,
"https://sploop.io/img/skins/body39.png?v=1923912": 35,
"https://sploop.io/img/skins/body40.png?v=1923912": 35,
"https://sploop.io/img/skins/body41.png?v=1923912": 35,
"https://sploop.io/img/skins/body42.png?v=1923912": 35,
"https://sploop.io/img/skins/body43.png?v=1923912": 35,
"https://sploop.io/img/skins/body44.png?v=1923912": 35,
"https://sploop.io/img/skins/body45.png?v=1923912": 35,
"https://sploop.io/img/skins/body46.png?v=1923912": 35,
"https://sploop.io/img/skins/body47.png?v=1923912": 35,
"https://sploop.io/img/skins/body48.png?v=1923912": 35,
"https://sploop.io/img/skins/body49.png?v=1923912": 35,
"https://sploop.io/img/skins/body50.png?v=1923912": 35,
"https://sploop.io/img/skins/body51.png?v=1923912": 35,
"https://sploop.io/img/skins/body52.png?v=1923912": 35,
"https://sploop.io/img/skins/body53.png?v=1923912": 35,
"https://sploop.io/img/skins/body54.png?v=1923912": 35,
"https://sploop.io/img/skins/body55.png?v=1923912": 35,
"https://sploop.io/img/skins/body56.png?v=1923912": 35,
"https://sploop.io/img/skins/body57.png?v=1923912": 35,
"https://sploop.io/img/skins/body58.png?v=1923912": 35,
"https://sploop.io/img/skins/body59.png?v=1923912": 35,
"https://sploop.io/img/skins/body60.png?v=1923912": 35,
"https://sploop.io/img/skins/body61.png?v=1923912": 35,
"https://sploop.io/img/skins/body62.png?v=1923912": 35,
"https://sploop.io/img/skins/body63.png?v=1923912": 35,
"https://sploop.io/img/skins/body64.png?v=1923912": 35,
"https://sploop.io/img/skins/body65.png?v=1923912": 35,
"https://sploop.io/img/skins/body66.png?v=1923912": 35,
"https://sploop.io/img/skins/body67.png?v=1923912": 35,
"https://sploop.io/img/skins/body68.png?v=1923912": 35,
"https://sploop.io/img/skins/body69.png?v=1923912": 35,
"https://sploop.io/img/skins/body70.png?v=1923912": 35,
"https://sploop.io/img/skins/body71.png?v=1923912": 35,
"https://sploop.io/img/skins/body72.png?v=1923912": 35,
"https://sploop.io/img/skins/body73.png?v=1923912": 35,
"https://sploop.io/img/skins/body74.png?v=1923912": 35,
"https://sploop.io/img/skins/body75.png?v=1923912": 35,
"https://sploop.io/img/skins/body76.png?v=1923912": 35,
"https://sploop.io/img/skins/body77.png?v=1923912": 35,
"https://sploop.io/img/skins/body78.png?v=1923912": 35,
"https://sploop.io/img/skins/body79.png?v=1923912": 35,
"https://sploop.io/img/skins/body80.png?v=1923912": 35,
"https://sploop.io/img/skins/body81.png?v=1923912": 35,
"https://sploop.io/img/skins/body82.png?v=1923912": 35,
"https://sploop.io/img/skins/body83.png?v=1923912": 35,
"https://sploop.io/img/skins/body84.png?v=1923912": 35,
"https://sploop.io/img/skins/body85.png?v=1923912": 35,
"https://sploop.io/img/skins/body86.png?v=1923912": 35,
"https://sploop.io/img/skins/body87.png?v=1923912": 35,
"https://sploop.io/img/skins/body88.png?v=1923912": 35,
"https://sploop.io/img/skins/body89.png?v=1923912": 35,
"https://sploop.io/img/skins/body90.png?v=1923912": 35,
"https://sploop.io/img/skins/body91.png?v=1923912": 35,
"https://sploop.io/img/skins/body92.png?v=1923912": 35,
"https://sploop.io/img/skins/body93.png?v=1923912": 35,
"https://sploop.io/img/skins/body94.png?v=1923912": 35,
"https://sploop.io/img/skins/body95.png?v=1923912": 35,
//more bodies added incase of future skins dont worry I didnt type them all out thanks for caring
"https://sploop.io/img/skins/body96.png?v=1923912": 35,
"https://sploop.io/img/skins/body97.png?v=1923912": 35,
"https://sploop.io/img/skins/body98.png?v=1923912": 35,
"https://sploop.io/img/skins/body99.png?v=1923912": 35,
"https://sploop.io/img/skins/body100.png?v=1923912": 35,
"https://sploop.io/img/skins/body101.png?v=1923912": 35,
"https://sploop.io/img/skins/body102.png?v=1923912": 35,
"https://sploop.io/img/skins/body103.png?v=1923912": 35,
"https://sploop.io/img/skins/body104.png?v=1923912": 35,
"https://sploop.io/img/skins/body105.png?v=1923912": 35,
"https://sploop.io/img/skins/body106.png?v=1923912": 35,
"https://sploop.io/img/skins/body107.png?v=1923912": 35,
"https://sploop.io/img/skins/body108.png?v=1923912": 35,
"https://sploop.io/img/skins/body109.png?v=1923912": 35,
"https://sploop.io/img/skins/body110.png?v=1923912": 35,
"https://sploop.io/img/skins/body111.png?v=1923912": 35,
"https://sploop.io/img/skins/body112.png?v=1923912": 35,
"https://sploop.io/img/skins/body113.png?v=1923912": 35,
"https://sploop.io/img/skins/body114.png?v=1923912": 35,
"https://sploop.io/img/skins/body115.png?v=1923912": 35,
"https://sploop.io/img/skins/body116.png?v=1923912": 35,
"https://sploop.io/img/skins/body117.png?v=1923912": 35,
"https://sploop.io/img/skins/body118.png?v=1923912": 35,
"https://sploop.io/img/skins/body119.png?v=1923912": 35,
"https://sploop.io/img/skins/body120.png?v=1923912": 35,
"https://sploop.io/img/skins/body121.png?v=1923912": 35,
"https://sploop.io/img/skins/body122.png?v=1923912": 35,
"https://sploop.io/img/skins/body123.png?v=1923912": 35,
"https://sploop.io/img/skins/body124.png?v=1923912": 35,
"https://sploop.io/img/skins/body125.png?v=1923912": 35,
"https://sploop.io/img/skins/body126.png?v=1923912": 35,
"https://sploop.io/img/skins/body127.png?v=1923912": 35,
"https://sploop.io/img/skins/body128.png?v=1923912": 35,
"https://sploop.io/img/skins/body129.png?v=1923912": 35,
"https://sploop.io/img/skins/body130.png?v=1923912": 35,
"https://sploop.io/img/skins/body131.png?v=1923912": 35,
"https://sploop.io/img/skins/body132.png?v=1923912": 35,
"https://sploop.io/img/skins/body133.png?v=1923912": 35,
"https://sploop.io/img/skins/body134.png?v=1923912": 35,
"https://sploop.io/img/skins/body135.png?v=1923912": 35,
"https://sploop.io/img/skins/body136.png?v=1923912": 35,
"https://sploop.io/img/skins/body137.png?v=1923912": 35,
"https://sploop.io/img/skins/body138.png?v=1923912": 35,
"https://sploop.io/img/skins/body139.png?v=1923912": 35,
"https://sploop.io/img/skins/body140.png?v=1923912": 35,
"https://sploop.io/img/skins/body141.png?v=1923912": 35,
"https://sploop.io/img/skins/body142.png?v=1923912": 35,
"https://sploop.io/img/skins/body143.png?v=1923912": 35,
"https://sploop.io/img/skins/body144.png?v=1923912": 35,
"https://sploop.io/img/skins/body145.png?v=1923912": 35,
"https://sploop.io/img/skins/body146.png?v=1923912": 35,
"https://sploop.io/img/skins/body147.png?v=1923912": 35,
"https://sploop.io/img/skins/body148.png?v=1923912": 35,
"https://sploop.io/img/skins/body149.png?v=1923912": 35,
"https://sploop.io/img/skins/body150.png?v=1923912": 35,
};
CanvasRenderingContext2D.prototype.drawImage = function(img, ...args) {
if (this.canvas.id === "game-canvas") {
const imageURL = img.src;
const radius = imageRadii[imageURL] || 0.0;
if (imageURL in imageRadii) {
const x = args[0];
const y = args[1];
const width = args[2];
const height = args[3];
const rotation = args[4] || 0;
drawImage.apply(this, [img, ...args]);
QuickQuix.drawCircle(x, y, width, height, rotation, radius);
return;
}
}
return drawImage.apply(this, [img, ...args]);
};
})();
//following function draws a second circle using healthbar so that player hitbox can be seen above hat.
(function() {
class xXSploopyTailXx {
constructor() {
this.text = {
color: {
all: "#fff"
},
visible: 1
};
this.rainbow = {};
this.offset = [0, Date.now()];
}
xXsploopyColorsXx() {
if (!this.rainbow.old || Date.now() - this.rainbow.old >= this.rainbow.time) {
this.rainbow.hue += this.rainbow.power * Math.random();
this.rainbow.old = Date.now();
}
xXsploopyTextXx.rb = `hsl(${this.rainbow.hue}, 100%, 50%)`;
}
xXsploopyOffsetXx() {
if (!this.offset[1] || Date.now() - this.offset[1] >= 10) {
this.offset[0]++;
this.offset[1] = Date.now();
}
}
}
let xXsploopyTextXx = new xXSploopyTailXx();
class xXSploopyLooperXx {
constructor() {
this.localPlayer = {
position: {
x: 0,
y: 0
},
maxPositions: 50
};
}
drawXxSplooptailXx(x, y) {
const radius = 35;
Context.save();
Context.beginPath();
Context.arc(x, y, radius, 0, 2 * Math.PI);
Context.lineWidth = 2;
Context.strokeStyle = hitbox_Circle_Colour;
Context.stroke();
Context.restore();
}
updateXxSploopyPositionXx(x, y) {
this.localPlayer.position = {
x,
y
};
}
drawXxSploopyCircleXx() {
const {
x,
y
} = this.localPlayer.position;
this.drawXxSplooptailXx(x, y);
}
}
let xXsploopyLooperXx = new xXSploopyLooperXx();
let Context;
let {
clearRect,
fillRect
} = CanvasRenderingContext2D.prototype;
CanvasRenderingContext2D.prototype.clearRect = function(x, y, width, height) {
if (this.canvas.id === "game-canvas") {
Context = this.canvas.getContext("2d");
xXsploopyTextXx.xXsploopyColorsXx();
}
return clearRect.apply(this, arguments);
};
CanvasRenderingContext2D.prototype.fillRect = function(x, y, width, height) {
if (document.getElementById("homepage").style.display == "none") {
xXsploopyTextXx.xXsploopyOffsetXx();
if (this.fillStyle == "#a4cc4f") {
xXsploopyLooperXx.updateXxSploopyPositionXx(x + 48, y - 70);
xXsploopyLooperXx.drawXxSploopyCircleXx();
}
if (this.fillStyle == "#cc5151" && Remove_weird_circle_above_animals === 0) {
xXsploopyLooperXx.updateXxSploopyPositionXx(x + 48, y - 70);
xXsploopyLooperXx.drawXxSploopyCircleXx();
}
}
return fillRect.apply(this, arguments);
};
})();