Simple yet modern render options for zombia.io with draggable UI.
// ==UserScript==
// @name hackqd's Render Options {Zombia.io}
// @namespace http://tampermonkey.net/
// @version 2.1
// @description Simple yet modern render options for zombia.io with draggable UI.
// @author hackqd
// @match *://zombia.io/*
// @grant none
// ==/UserScript==
(function() {
'use strict';
let disableBackground = false;
let disableProjectiles = false;
let disableBuildings = false;
let disableZombies = false;
let disableScenery = false;
let disablePlayers = false;
function makeDraggable(element) {
let isDragging = false;
let offsetX = 0, offsetY = 0;
element.addEventListener('mousedown', (e) => {
isDragging = true;
offsetX = e.clientX - element.offsetLeft;
offsetY = e.clientY - element.offsetTop;
element.style.cursor = "grabbing";
});
document.addEventListener('mousemove', (e) => {
if (isDragging) {
element.style.left = (e.clientX - offsetX) + "px";
element.style.top = (e.clientY - offsetY) + "px";
}
});
document.addEventListener('mouseup', () => {
isDragging = false;
element.style.cursor = "grab";
});
}
const settingsButton = document.createElement("div");
settingsButton.innerHTML = "⚙️";
settingsButton.style.position = "absolute";
settingsButton.style.top = "10px";
settingsButton.style.left = "10px";
settingsButton.style.width = "40px";
settingsButton.style.height = "40px";
settingsButton.style.background = "#717d7e";
settingsButton.style.color = "white";
settingsButton.style.fontSize = "24px";
settingsButton.style.textAlign = "center";
settingsButton.style.lineHeight = "40px";
settingsButton.style.borderRadius = "8px";
settingsButton.style.cursor = "grab";
settingsButton.style.zIndex = "1000";
document.body.appendChild(settingsButton);
makeDraggable(settingsButton);
const settingsPanel = document.createElement("div");
settingsPanel.style.position = "absolute";
settingsPanel.style.top = "60px";
settingsPanel.style.left = "10px";
settingsPanel.style.padding = "15px";
settingsPanel.style.background = "rgba(255, 255, 255, 0.1)";
settingsPanel.style.backdropFilter = "blur(10px)";
settingsPanel.style.borderRadius = "12px";
settingsPanel.style.boxShadow = "0 4px 10px rgba(0, 0, 0, 0.4)";
settingsPanel.style.color = "white";
settingsPanel.style.display = "none";
settingsPanel.style.zIndex = "1000";
settingsPanel.style.minWidth = "200px";
settingsPanel.style.width = "auto";
document.body.appendChild(settingsPanel);
makeDraggable(settingsPanel);
const title = document.createElement("div");
title.innerText = "Render Options";
title.style.fontSize = "18px";
title.style.fontWeight = "bold";
title.style.marginBottom = "10px";
settingsPanel.appendChild(title);
const buttonContainer = document.createElement("div");
buttonContainer.style.display = "grid";
buttonContainer.style.gridTemplateColumns = "repeat(3, 1fr)";
buttonContainer.style.gridGap = "10px";
buttonContainer.style.marginBottom = "15px";
settingsPanel.appendChild(buttonContainer);
function createToggleButton(text, callback) {
const button = document.createElement("button");
button.innerText = text;
button.style.padding = "8px 15px";
button.style.background = "red";
button.style.color = "white";
button.style.border = "none";
button.style.cursor = "pointer";
button.style.borderRadius = "5px";
button.style.fontSize = "14px";
button.style.transition = "background-color 0.3s";
button.style.minWidth = "120px";
button.style.outline = "none";
button.addEventListener("click", callback);
buttonContainer.appendChild(button);
return button;
}
const toggleOptions = [
{ label: "Background", prop: "groundLayer" },
{ label: "Projectiles", prop: "projectiles" },
{ label: "Buildings", prop: "buildings" },
{ label: "Zombies", prop: "zombieLayer" },
{ label: "Scenery", prop: "scenery" },
{ label: "Players", prop: "players" }
];
toggleOptions.forEach(option => {
createToggleButton(`Stop Rendering ${option.label}`, function() {
let prop = `disable${option.label}`;
window[prop] = !window[prop];
this.innerText = window[prop] ? `Start Rendering ${option.label}` : `Stop Rendering ${option.label}`;
this.style.background = window[prop] ? "green" : "red";
if (window.game && window.game.renderer && window.game.renderer[option.prop]) {
window.game.renderer[option.prop].setVisible(!window[prop]);
} else {
console.warn(`${option.label} layer not found`);
}
});
});
settingsButton.addEventListener("click", function() {
settingsPanel.style.display = (settingsPanel.style.display === "none") ? "block" : "none";
});
})();