// ==UserScript== // @name Sploop Crosshair Mod // @namespace http://tampermonkey.net/ // @version 5 // @description Custom crosshairs for Sploop.io // @author hooder // @match https://sploop.io/* // @grant none // @run-at document-end // @downloadURL none // ==/UserScript== (function () { 'use strict'; const style = document.createElement('style'); style.textContent = ` * { font-family: 'Segoe UI', sans-serif; } #hookx-ui { position: fixed; top: 50px; left: 50px; width: 250px; background: linear-gradient(135deg, rgba(20, 20, 20, 0.95), rgba(40, 40, 40, 0.95)); border: 1px solid #ff00ff; border-radius: 8px; color: #ffffff; z-index: 100000; box-shadow: 0 0 15px rgba(255, 0, 255, 0.3); padding: 10px; user-select: none; transition: opacity 0.3s; } #hookx-ui.hidden { display: none; } .hookx-header { font-size: 16px; font-weight: bold; color: #00ffff; margin-bottom: 10px; text-align: center; } .hookx-toggle { margin: 5px 0; display: flex; align-items: center; } .hookx-toggle label { margin-left: 5px; font-size: 12px; } .hookx-button { margin: 5px 0; width: 100%; padding: 5px; background: #1a1a1a; color: #ffffff; border: 1px solid #00ffff; border-radius: 4px; font-size: 12px; text-align: center; cursor: pointer; } .hookx-button.active { background: #ff00ff; } .hookx-select, .hookx-color, .hookx-range { margin: 5px 0; width: 100%; padding: 5px; background: #1a1a1a; color: #ffffff; border: 1px solid #00ffff; border-radius: 4px; font-size: 12px; } .hookx-label { font-size: 12px; color: #00ffff; margin: 5px 0 2px; } .hookx-range { -webkit-appearance: none; appearance: none; height: 5px; background: #333; outline: none; } .hookx-range::-webkit-slider-thumb { -webkit-appearance: none; appearance: none; width: 15px; height: 15px; background: #ff00ff; cursor: pointer; border-radius: 50%; } .crosshair { position: fixed; z-index: 100001; pointer-events: none; display: none; transform: translate(-50%, -50%); will-change: transform; } .crosshair.dot { border-radius: 50%; } .crosshair.cross { width: 20px; height: 20px; } .crosshair.cross::before, .crosshair.cross::after { content: ''; position: absolute; background-color: currentColor; } .crosshair.cross::before { top: 50%; left: 0; width: 100%; height: 2px; transform: translateY(-50%); } .crosshair.cross::after { top: 0; left: 50%; width: 2px; height: 100%; transform: translateX(-50%); } .crosshair.spike { background-image: url("https://sploop.io/img/entity/hard_spike.png"); background-size: cover; background-repeat: no-repeat; background-position: center; } .crosshair.square { border: 2px solid; } .crosshair.triangle { width: 0; height: 0; border-left: 10px solid transparent; border-right: 10px solid transparent; border-bottom: 18px solid currentColor; } .crosshair.xcross { width: 20px; height: 20px; } .crosshair.xcross::before, .crosshair.xcross::after { content: ''; position: absolute; width: 2px; height: 100%; background-color: currentColor; left: 50%; top: 0; transform-origin: center; } .crosshair.xcross::before { transform: rotate(45deg); } .crosshair.xcross::after { transform: rotate(-45deg); } body.hide-cursor * { cursor: none !important; } #watermark { position: fixed; bottom: 100px; right: 10px; color: rgba(255, 255, 255, 0.2); font-size: 14px; font-family: 'Segoe UI', sans-serif; pointer-events: none; z-index: 100001; user-select: none; } `; document.head.appendChild(style); const ui = document.createElement('div'); ui.id = 'hookx-ui'; ui.innerHTML = `
Crosshair Gui
Move GUI
Crosshair Size (5-50px)
Crosshair Opacity (0.1-1)
Crosshair Offset (0-20px)
`; document.body.appendChild(ui); const watermark = document.createElement('div'); watermark.id = 'watermark'; watermark.textContent = 'hooder'; document.body.appendChild(watermark); let crosshair = document.createElement('div'); crosshair.className = 'crosshair dot'; document.body.appendChild(crosshair); const toggleCrosshair = document.getElementById('toggleCrosshair'); const moveGUIButton = document.getElementById('moveGUI'); const styleSelect = document.getElementById('crosshairStyle'); const colorPicker = document.getElementById('crosshairColor'); const sizeSlider = document.getElementById('crosshairSize'); const opacitySlider = document.getElementById('crosshairOpacity'); const offsetSlider = document.getElementById('crosshairOffset'); let isDragging = false; let dragEnabled = false; let currentX = 50; let currentY = 50; let initialX; let initialY; function setCrosshairStyle(styleName) { const newCrosshair = document.createElement('div'); newCrosshair.className = `crosshair ${styleName}`; const size = parseInt(sizeSlider.value); if (styleName === 'triangle') { newCrosshair.style.borderLeftWidth = `${size / 2}px`; newCrosshair.style.borderRightWidth = `${size / 2}px`; newCrosshair.style.borderBottomWidth = `${size * 0.9}px`; newCrosshair.style.borderLeftColor = 'transparent'; newCrosshair.style.borderRightColor = 'transparent'; newCrosshair.style.borderBottomColor = colorPicker.value; } else { newCrosshair.style.width = `${size}px`; newCrosshair.style.height = `${size}px`; } document.body.replaceChild(newCrosshair, crosshair); crosshair = newCrosshair; updateColor(); if (toggleCrosshair.checked) { crosshair.style.display = 'block'; } } function updateColor() { const color = colorPicker.value; crosshair.style.backgroundColor = ''; crosshair.style.borderColor = ''; crosshair.style.color = color; crosshair.style.opacity = parseFloat(opacitySlider.value); if (crosshair.classList.contains('dot')) { crosshair.style.backgroundColor = color; } else if (crosshair.classList.contains('cross') || crosshair.classList.contains('xcross')) { crosshair.style.background = 'transparent'; } else if (crosshair.classList.contains('square')) { crosshair.style.borderColor = color; crosshair.style.background = 'transparent'; } else if (crosshair.classList.contains('triangle')) { crosshair.style.borderBottomColor = color; } } function moveCrosshair(e) { const offset = parseInt(offsetSlider.value); crosshair.style.left = `${e.clientX + offset}px`; crosshair.style.top = `${e.clientY + offset}px`; } toggleCrosshair.addEventListener('change', () => { if (toggleCrosshair.checked) { crosshair.style.display = 'block'; document.body.classList.add('hide-cursor'); document.addEventListener('mousemove', moveCrosshair); } else { crosshair.style.display = 'none'; document.body.classList.remove('hide-cursor'); document.removeEventListener('mousemove', moveCrosshair); } }); styleSelect.addEventListener('change', () => { setCrosshairStyle(styleSelect.value); }); colorPicker.addEventListener('input', updateColor); sizeSlider.addEventListener('input', () => { setCrosshairStyle(styleSelect.value); }); opacitySlider.addEventListener('input', updateColor); offsetSlider.addEventListener('input', () => { if (toggleCrosshair.checked) { moveCrosshair({ clientX: crosshair.offsetLeft, clientY: crosshair.offsetTop }); } }); moveGUIButton.addEventListener('click', () => { dragEnabled = !dragEnabled; moveGUIButton.classList.toggle('active', dragEnabled); }); ui.addEventListener('mousedown', (e) => { if (dragEnabled) { initialX = e.clientX - currentX; initialY = e.clientY - currentY; isDragging = true; } }); document.addEventListener('mousemove', (e) => { if (isDragging && dragEnabled) { e.preventDefault(); currentX = e.clientX - initialX; currentY = e.clientY - initialY; ui.style.left = `${currentX}px`; ui.style.top = `${currentY}px`; } }); document.addEventListener('mouseup', () => { isDragging = false; }); document.addEventListener('keydown', (e) => { if (e.key === 'Shift' && e.location === KeyboardEvent.DOM_KEY_LOCATION_RIGHT) { ui.classList.toggle('hidden'); } }); updateColor(); })();