// ==UserScript==
// @name WormVision Lite MAX – Full ESP + Aimbot UI (CloudSafe/Chromebook)
// @namespace http://wormgpt.blacklightrift
// @version 1.2
// @description Chromebook-safe Fortnite ESP + Head Detection + FOV + Smooth Aimbot + Triggerbot | Runs on Xbox Cloud Gaming 🎯💻🧠
// @author Worm
// @match *://*.xbox.com/*
// @grant none
// ==/UserScript==
(function () {
'use strict';
///////////////////////////////
// === UI & STYLE SYSTEM === //
///////////////////////////////
const style = document.createElement('style');
style.innerHTML = `
.worm-ui {
position: fixed;
top: 20px;
right: 20px;
width: 280px;
background: #0e0e12;
border: 2px solid #8f00ff;
border-radius: 12px;
color: white;
font-family: Arial, sans-serif;
font-size: 14px;
z-index: 999999;
padding: 12px;
box-shadow: 0 0 12px #8f00ff88;
display: none;
}
.worm-ui h2 {
margin: 0 0 10px;
font-size: 16px;
text-align: center;
color: #BB86FC;
}
.worm-ui label {
display: flex;
justify-content: space-between;
margin: 6px 0;
}
.worm-ui input[type=checkbox], .worm-ui input[type=range] {
transform: scale(1.2);
}
.worm-overlay, .worm-head {
position: fixed;
z-index: 999998;
pointer-events: none;
}
.worm-box {
border: 2px solid lime;
background: rgba(0, 255, 0, 0.1);
border-radius: 4px;
}
.worm-head {
width: 6px;
height: 6px;
background: red;
border-radius: 50%;
}
.worm-fov {
border: 2px dashed rgba(255, 0, 255, 0.6);
border-radius: 50%;
}
`;
document.head.appendChild(style);
const uiHTML = `
<div class="worm-ui" id="wormMenu">
<h2>🧠 WormVision Lite MAX</h2>
<label>ESP <input type="checkbox" id="esp-toggle"></label>
<label>Triggerbot <input type="checkbox" id="trigger-toggle"></label>
<label>Soft Aim <input type="checkbox" id="aim-toggle"></label>
<label>FOV Overlay <input type="checkbox" id="fov-toggle"></label>
<label>Aim Smooth<input type="range" id="smooth-slider" min="1" max="10" value="4"></label>
</div>
`;
document.body.insertAdjacentHTML('beforeend', uiHTML);
const menu = document.getElementById('wormMenu');
// === Toggle Menu With Ctrl+Alt+G+3
let buffer = [];
window.addEventListener('keydown', e => {
buffer.push(e.key.toLowerCase());
if (buffer.length > 5) buffer.shift();
if (buffer.join('-').includes('control-alt-g-3')) {
menu.style.display = menu.style.display === 'none' ? 'block' : 'none';
buffer = [];
}
});
///////////////////////////
// === STATE + LOGIC === //
///////////////////////////
const config = {
esp: false,
triggerbot: false,
aim: false,
fov: false,
smoothness: 4,
aimKey: 'f',
aimRadius: 100,
};
document.getElementById('esp-toggle').addEventListener('change', e => config.esp = e.target.checked);
document.getElementById('trigger-toggle').addEventListener('change', e => config.triggerbot = e.target.checked);
document.getElementById('aim-toggle').addEventListener('change', e => config.aim = e.target.checked);
document.getElementById('fov-toggle').addEventListener('change', e => config.fov = e.target.checked);
document.getElementById('smooth-slider').addEventListener('input', e => config.smoothness = parseInt(e.target.value));
let aimX = 0, aimY = 0;
function drawESP(x, y, w, h, scaleX, scaleY) {
const box = document.createElement('div');
box.className = 'worm-overlay worm-box';
box.style.left = `${x * scaleX}px`;
box.style.top = `${y * scaleY}px`;
box.style.width = `${w * scaleX}px`;
box.style.height = `${h * scaleY}px`;
document.body.appendChild(box);
setTimeout(() => box.remove(), 80);
}
function drawHead(x, y, scaleX, scaleY) {
const dot = document.createElement('div');
dot.className = 'worm-head';
dot.style.left = `${x * scaleX}px`;
dot.style.top = `${y * scaleY}px`;
document.body.appendChild(dot);
setTimeout(() => dot.remove(), 80);
}
function drawFOV() {
const fov = document.createElement('div');
const size = config.aimRadius * 2;
fov.className = 'worm-overlay worm-fov';
fov.style.width = `${size}px`;
fov.style.height = `${size}px`;
fov.style.left = `calc(50% - ${config.aimRadius}px)`;
fov.style.top = `calc(50% - ${config.aimRadius}px)`;
document.body.appendChild(fov);
setTimeout(() => fov.remove(), 80);
}
///////////////////////////////
// === VISION / AIM ENGINE ===
///////////////////////////////
function lerp(a, b, t) {
return a + (b - a) * t;
}
function scanFrame() {
const video = document.querySelector('video');
if (!video || video.videoWidth === 0) return;
const canvas = document.createElement('canvas');
canvas.width = video.videoWidth;
canvas.height = video.videoHeight;
const ctx = canvas.getContext('2d');
try {
ctx.drawImage(video, 0, 0, canvas.width, canvas.height);
const pixels = ctx.getImageData(0, 0, canvas.width, canvas.height).data;
const centerX = canvas.width / 2;
const centerY = canvas.height / 2;
const targets = [];
for (let y = 0; y < canvas.height; y += 6) {
for (let x = 0; x < canvas.width; x += 6) {
const idx = (y * canvas.width + x) * 4;
const r = pixels[idx], g = pixels[idx + 1], b = pixels[idx + 2];
if ((r > 200 && g < 80 && b < 80) || (r > 200 && g > 200 && b > 200)) {
targets.push({ x, y });
}
}
}
const clusters = groupByProximity(targets, 40);
const scaleX = window.innerWidth / canvas.width;
const scaleY = window.innerHeight / canvas.height;
let best = null;
let bestDist = Infinity;
clusters.forEach(cluster => {
const minX = Math.min(...cluster.map(p => p.x));
const minY = Math.min(...cluster.map(p => p.y));
const maxX = Math.max(...cluster.map(p => p.x));
const maxY = Math.max(...cluster.map(p => p.y));
const width = maxX - minX;
const height = maxY - minY;
const headX = minX + width / 2;
const headY = minY;
if (config.esp) drawESP(minX, minY, width, height, scaleX, scaleY);
if (config.esp) drawHead(headX, headY, scaleX, scaleY);
const dx = headX - centerX;
const dy = headY - centerY;
const dist = Math.sqrt(dx * dx + dy * dy);
if (dist < bestDist && dist < config.aimRadius) {
best = { dx, dy };
bestDist = dist;
}
});
// Triggerbot
if (config.triggerbot) {
const mid = ctx.getImageData(centerX, centerY, 1, 1).data;
if (mid[0] > 200 && mid[1] < 80 && mid[2] < 80) {
document.dispatchEvent(new KeyboardEvent('keydown', { key: config.aimKey, bubbles: true }));
document.dispatchEvent(new KeyboardEvent('keyup', { key: config.aimKey, bubbles: true }));
}
}
// Aim assist
if (config.aim && best) {
aimX = lerp(aimX, best.dx, 1 / config.smoothness);
aimY = lerp(aimY, best.dy, 1 / config.smoothness);
window.dispatchEvent(new MouseEvent('mousemove', {
movementX: aimX / 4,
movementY: aimY / 4,
bubbles: true
}));
}
if (config.fov) drawFOV();
} catch (err) {
// Ignore CORS errors
}
}
function groupByProximity(points, threshold = 40) {
const groups = [];
points.forEach(p => {
let added = false;
for (let g of groups) {
if (g.some(q => Math.hypot(p.x - q.x, p.y - q.y) < threshold)) {
g.push(p);
added = true;
break;
}
}
if (!added) groups.push([p]);
});
return groups.filter(g => g.length > 5);
}
setInterval(scanFrame, 70);
})();