EvoWars Classic Mod

Advanced sandbox engine tool with unrestricted closeness thresholds, standalone bot size scaling, and distinct animation state overriding loops.

ही स्क्रिप्ट इंस्टॉल करण्यासाठी तुम्हाला Tampermonkey, Greasemonkey किंवा Violentmonkey यासारखे एक्स्टेंशन इंस्टॉल करावे लागेल.

You will need to install an extension such as Tampermonkey to install this script.

ही स्क्रिप्ट इंस्टॉल करण्यासाठी तुम्हाला Tampermonkey किंवा Violentmonkey यासारखे एक्स्टेंशन इंस्टॉल करावे लागेल..

You will need to install an extension such as Tampermonkey or Userscripts to install this script.

ही स्क्रिप्ट इंस्टॉल करण्यासाठी तुम्हाला Tampermonkey यासारखे एक्स्टेंशन इंस्टॉल करावे लागेल..

ही स्क्रिप्ट इंस्टॉल करण्यासाठी तुम्हाला एक युझर स्क्रिप्ट व्यवस्थापक एक्स्टेंशन इंस्टॉल करावे लागेल.

(माझ्याकडे आधीच युझर स्क्रिप्ट व्यवस्थापक आहे, मला इंस्टॉल करू द्या!)

Advertisement:

ही स्टाईल इंस्टॉल करण्यासाठी तुम्हाला Stylus सारखे एक्स्टेंशन इंस्टॉल करावे लागेल.

ही स्टाईल इंस्टॉल करण्यासाठी तुम्हाला Stylus सारखे एक्स्टेंशन इंस्टॉल करावे लागेल.

ही स्टाईल इंस्टॉल करण्यासाठी तुम्हाला Stylus सारखे एक्स्टेंशन इंस्टॉल करावे लागेल.

ही स्टाईल इंस्टॉल करण्यासाठी तुम्हाला एक युझर स्टाईल व्यवस्थापक इंस्टॉल करावे लागेल.

ही स्टाईल इंस्टॉल करण्यासाठी तुम्हाला एक युझर स्टाईल व्यवस्थापक इंस्टॉल करावे लागेल.

ही स्टाईल इंस्टॉल करण्यासाठी तुम्हाला एक युझर स्टाईल व्यवस्थापक इंस्टॉल करावे लागेल.

(माझ्याकडे आधीच युझर स्टाईल व्यवस्थापक आहे, मला इंस्टॉल करू द्या!)

Advertisement:

// ==UserScript==
// @name         EvoWars Classic Mod
// @namespace    http://tampermonkey.net/
// @version      2026-06-19_v25.3
// @description  Advanced sandbox engine tool with unrestricted closeness thresholds, standalone bot size scaling, and distinct animation state overriding loops.
// @author       KILLER & Assistant
// @match        https://evowars.io/*
// @grant        none
// ==/UserScript==

(function () {
    'use strict';

    let rt = null;
    let currentMode = 'circle';
    let globalAngle = 0;
    let pulseWave = 0;
    let visualInvisibleMask = false;

    // Lowered threshold limit allows bots to move directly into your immediate weapon range
    let baseDistanceModifier = -250;
    let botSizeMultiplier = 1.0;
    let forcedAnimationIndex = 0; // 0 = Standard, 1 = Attack Pose, 2 = Run Sprint State

    const textMatrix = [
        [1,0,1,0,0,1,0,1,0,1,0,0,0,1,0,0,1,1,1,0,1,1,0,0],
        [1,0,1,0,0,1,0,1,0,1,0,0,0,1,0,0,1,0,0,0,1,0,1,0],
        [1,1,1,0,0,1,0,1,0,1,0,0,0,1,0,0,1,1,0,0,1,1,0,0],
        [1,0,1,0,0,1,0,1,0,1,0,0,0,1,0,0,1,0,0,0,1,0,1,0],
        [1,0,1,0,0,1,0,1,1,1,1,0,1,1,1,0,1,1,1,0,1,0,0,1]
    ];

    function initUI() {
        if (document.getElementById('neon-sandbox-shell')) return;

        const style = document.createElement('style');
        style.innerHTML = `
            #neon-sandbox-shell {
                position: fixed;
                top: 40px;
                left: 40px;
                background: rgba(10, 10, 16, 0.96);
                border: 2px solid #ff1493;
                border-radius: 10px;
                padding: 12px;
                z-index: 999999;
                font-family: 'Segoe UI', system-ui, sans-serif;
                color: #fff;
                width: 240px;
                box-shadow: 0 0 15px rgba(255, 20, 147, 0.3);
                cursor: move;
                user-select: none;
            }
            .panel-header {
                text-align: center;
                font-weight: 900;
                color: #fff;
                letter-spacing: 1.5px;
                margin-bottom: 10px;
                font-size: 13px;
                border-bottom: 1px solid rgba(255, 255, 255, 0.1);
                padding-bottom: 6px;
            }
            .panel-header span {
                color: #ff1493;
            }
            .scroll-container {
                max-height: 240px;
                overflow-y: auto;
                padding-right: 4px;
            }
            .scroll-container::-webkit-scrollbar {
                width: 4px;
            }
            .scroll-container::-webkit-scrollbar-track {
                background: rgba(255, 255, 255, 0.02);
            }
            .scroll-container::-webkit-scrollbar-thumb {
                background: #ff1493;
                border-radius: 2px;
            }
            .cyber-btn {
                display: flex;
                justify-content: space-between;
                align-items: center;
                width: 100%;
                margin-bottom: 6px;
                background: rgba(255, 255, 255, 0.04);
                color: #ccc;
                border: 1px solid rgba(255, 255, 255, 0.08);
                border-radius: 4px;
                padding: 6px 10px;
                cursor: pointer;
                font-size: 11px;
                font-weight: 600;
                transition: all 0.15s ease;
            }
            .cyber-btn:hover {
                background: rgba(255, 20, 147, 0.12);
                color: #fff;
                border-color: #ff1493;
            }
            .cyber-btn.active {
                border-color: #00ffff;
                color: #00ffff;
                background: rgba(0, 255, 255, 0.05);
            }
            .btn-status {
                width: 8px;
                height: 8px;
                border-radius: 50%;
                background: rgba(255, 255, 255, 0.15);
                border: 1px solid rgba(255, 255, 255, 0.3);
            }
            .cyber-btn.active .btn-status {
                background: #00ffff;
                box-shadow: 0 0 6px #00ffff;
                border-color: #00ffff;
            }
            .toggle-btn {
                width: 100%;
                margin-bottom: 10px;
                background: #200015;
                color: #ff1493;
                border: 1px solid #ff1493;
                border-radius: 5px;
                padding: 6px;
                cursor: pointer;
                font-weight: bold;
                font-size: 11px;
                text-transform: uppercase;
                transition: all 0.15s ease;
            }
            .toggle-btn.active {
                background: #001f1f;
                color: #00ffff;
                border-color: #00ffff;
            }
            .control-row {
                display: flex;
                justify-content: space-between;
                align-items: center;
                margin-bottom: 6px;
                background: rgba(255, 255, 255, 0.02);
                padding: 4px 6px;
                border-radius: 4px;
                border: 1px solid rgba(255, 255, 255, 0.05);
            }
            .ctrl-label {
                font-size: 9px;
                font-weight: bold;
                color: #aaa;
            }
            .step-btn {
                width: 22px;
                height: 22px;
                background: #111;
                color: #ff1493;
                border: 1px solid #ff1493;
                border-radius: 4px;
                font-weight: bold;
                cursor: pointer;
                font-size: 12px;
                display: flex;
                align-items: center;
                justify-content: center;
                transition: all 0.15s;
            }
            .step-btn:hover {
                background: #ff1493;
                color: #fff;
            }
        `;
        document.head.appendChild(style);

        const menu = document.createElement('div');
        menu.id = 'neon-sandbox-shell';

        menu.innerHTML = `
            <div class="panel-header">🎭 <span>K I L L E R</span> 🎭</div>

            <div class="control-row">
                <span class="ctrl-label">DISTANCE MATRIX</span>
                <div style="display:flex; gap:6px;">
                    <button id="dist-down" class="step-btn">-</button>
                    <button id="dist-up" class="step-btn">+</button>
                </div>
            </div>

            <div class="control-row">
                <span class="ctrl-label">BOT SCALE SIZE</span>
                <div style="display:flex; gap:6px;">
                    <button id="size-down" class="step-btn">-</button>
                    <button id="size-up" class="step-btn">+</button>
                </div>
            </div>

            <div class="control-row">
                <span class="ctrl-label">ANIMATION INDEX</span>
                <div style="display:flex; gap:6px;">
                    <button id="anim-cycle" class="step-btn">🔄</button>
                </div>
            </div>

            <button id="t-visual" class="toggle-btn">Lag Cleaner: OFF</button>

            <div class="scroll-container">
                <button id="m-killer" class="cyber-btn">KILLER Matrix Word <div class="btn-status"></div></button>
                <button id="m-circle" class="cyber-btn">Strike Orbit <div class="btn-status"></div></button>
                <button id="m-duoring" class="cyber-btn">Double Ring Shell <div class="btn-status"></div></button>
                <button id="m-vortex" class="cyber-btn">Vortex Storm <div class="btn-status"></div></button>
                <button id="m-lattice" class="cyber-btn">Matrix Grid Lattice <div class="btn-status"></div></button>
                <button id="m-maploop" class="cyber-btn">Map Boundary Patrol <div class="btn-status"></div></button>
                <button id="m-singularity" class="cyber-btn">Cosmic Singularity <div class="btn-status"></div></button>
                <button id="m-dna" class="cyber-btn">Double Helix DNA <div class="btn-status"></div></button>
                <button id="m-atom" class="cyber-btn">Satellite Shells <div class="btn-status"></div></button>
                <button id="m-star" class="cyber-btn">Pentagram Matrix <div class="btn-status"></div></button>
                <button id="m-infinity" class="cyber-btn">Infinity Loop <div class="btn-status"></div></button>
                <button id="m-square" class="cyber-btn">Box Perimeter <div class="btn-status"></div></button>
                <button id="m-warp" class="cyber-btn">Hyperdrive Warp <div class="btn-status"></div></button>
            </div>
        `;
        document.body.appendChild(menu);

        const modes = ['killer', 'circle', 'duoring', 'vortex', 'lattice', 'maploop', 'singularity', 'dna', 'atom', 'star', 'infinity', 'square', 'warp'];
        modes.forEach(mode => {
            document.getElementById(`m-${mode}`).onclick = function() {
                currentMode = mode;
                modes.forEach(m => document.getElementById(`m-${m}`).classList.remove('active'));
                this.classList.add('active');
            };
        });
        document.getElementById('m-killer').classList.add('active');
        currentMode = 'killer';

        // Expanded control parameters allowing overlapping ranges
        document.getElementById('dist-up').onclick = () => baseDistanceModifier += 25;
        document.getElementById('dist-down').onclick = () => baseDistanceModifier -= 25; // Removed strict minimum baseline limit

        document.getElementById('size-up').onclick = () => botSizeMultiplier = Math.min(10.0, botSizeMultiplier + 0.2);
        document.getElementById('size-down').onclick = () => botSizeMultiplier = Math.max(0.1, botSizeMultiplier - 0.2);

        document.getElementById('anim-cycle').onclick = () => {
            forcedAnimationIndex = (forcedAnimationIndex + 1) % 3;
        };

        const vToggle = document.getElementById('t-visual');
        vToggle.onclick = () => {
            visualInvisibleMask = !visualInvisibleMask;
            vToggle.classList.toggle('active', visualInvisibleMask);
            vToggle.innerText = visualInvisibleMask ? "Lag Cleaner: ACTIVE ✨" : "Lag Cleaner: OFF";
        };

        let isDragging = false;
        let offsetX, offsetY;
        menu.addEventListener('mousedown', (e) => {
            if (e.target.tagName === 'BUTTON' || e.target.closest('.scroll-container')) return;
            isDragging = true;
            offsetX = e.clientX - menu.offsetLeft;
            offsetY = e.clientY - menu.offsetTop;
        });
        window.addEventListener('mousemove', (e) => {
            if (!isDragging) return;
            menu.style.left = (e.clientX - offsetX) + 'px';
            menu.style.top = (e.clientY - offsetY) + 'px';
        });
        window.addEventListener('mouseup', () => isDragging = false);
    }

    function tickProcessingPipeline() {
        if (!rt || !rt.types_by_index) return;

        let me = null;
        let enemies = [];

        for (let i = 0; i < rt.types_by_index.length; i++) {
            const type = rt.types_by_index[i];
            if (!type || !type.instances || type.instances.length === 0) continue;
            const sample = type.instances[0];
            if (!sample || !sample.instance_vars) continue;

            if (type.instances.length === 1 && sample.instance_vars.length >= 60 && sample.instance_vars.length <= 64) {
                me = sample;
            } else if (type.instances.length > 1 && sample.instance_vars.length >= 64 && sample.instance_vars.length <= 72) {
                enemies = type.instances;
            }
        }

        if (!me) return;

        globalAngle += 0.025;
        pulseWave += 0.04;

        const playerSizeFactor = me.width || 64;
        const minimumSafeRadius = (playerSizeFactor * 2.5) + 120 + baseDistanceModifier;
        const separationSpacing = 240;

        let wordPoints = [];
        for (let r = 0; r < textMatrix.length; r++) {
            for (let c = 0; c < textMatrix[r].length; c++) {
                if (textMatrix[r][c] === 1) {
                    wordPoints.push({ r: r, c: c });
                }
            }
        }

        for (let i = 0; i < enemies.length; i++) {
            const p = enemies[i];
            if (!p || p.uid === me.uid) continue;

            if (visualInvisibleMask) {
                p.x = -5000;
                p.y = -5000;
                continue;
            }

            // Independent Bot Scaling Interface Logic
            if (!p.baseWidthStorage) {
                p.baseWidthStorage = p.width || 64;
                p.baseHeightStorage = p.height || 64;
            }
            p.width = p.baseWidthStorage * botSizeMultiplier;
            p.height = p.baseHeightStorage * botSizeMultiplier;

            // Forced Engine Animation Overriding States
            if (p.cur_animation) {
                if (forcedAnimationIndex === 1) {
                    p.cur_animation.name = "attack";
                } else if (forcedAnimationIndex === 2) {
                    p.cur_animation.name = "run";
                }
            }

            if (p.instance_vars) {
                if (typeof p.instance_vars[0] === 'number') p.instance_vars[0] = 9999999;
                if (typeof p.instance_vars[12] === 'number') p.instance_vars[12] = 0;
                if (p.instance_vars[1] === true) p.instance_vars[1] = false;
            }

            const spreadFactor = (i / Math.max(1, enemies.length));
            const spreadAngle = spreadFactor * Math.PI * 2;

            switch(currentMode) {
                case 'killer': {
                    if (wordPoints.length > 0) {
                        const ptIndex = i % wordPoints.length;
                        const pt = wordPoints[ptIndex];
                        const textSpacingX = 55;
                        const textSpacingY = 65;

                        const textCenterX = me.x - ((textMatrix[0].length * textSpacingX) / 2);
                        const textCenterY = me.y - (minimumSafeRadius + 100);

                        p.x = textCenterX + (pt.c * textSpacingX);
                        p.y = textCenterY + (pt.r * textSpacingY);
                    } else {
                        p.x = me.x;
                        p.y = me.y - minimumSafeRadius;
                    }
                    break;
                }

                case 'circle': {
                    const individualAngle = globalAngle + spreadAngle;
                    p.x = me.x + Math.cos(individualAngle) * minimumSafeRadius;
                    p.y = me.y + Math.sin(individualAngle) * minimumSafeRadius;
                    break;
                }

                case 'duoring': {
                    const layer = i % 2;
                    const ringSize = minimumSafeRadius + (layer * separationSpacing);
                    const ringAngle = globalAngle + (Math.floor(i / 2) * (Math.PI * 2 / Math.ceil(enemies.length / 2)));
                    p.x = me.x + Math.cos(ringAngle) * ringSize;
                    p.y = me.y + Math.sin(ringAngle) * ringSize;
                    break;
                }

                case 'vortex': {
                    const depthFactor = (i % 4) + 1;
                    const dynamicRadius = minimumSafeRadius + (depthFactor * (separationSpacing - 50));
                    const vortexAngle = (globalAngle * (3 / depthFactor)) + spreadAngle;
                    p.x = me.x + Math.cos(vortexAngle) * dynamicRadius;
                    p.y = me.y + Math.sin(vortexAngle) * dynamicRadius;
                    break;
                }

                case 'lattice': {
                    const columns = Math.ceil(Math.sqrt(enemies.length));
                    const row = Math.floor(i / columns);
                    const col = i % columns;
                    const gridGapX = 230;
                    const gridGapY = 230;

                    const originX = me.x - ((columns - 1) * gridGapX / 2);
                    const originY = me.y - (minimumSafeRadius + 260);

                    p.x = originX + (col * gridGapX);
                    p.y = originY - (row * gridGapY);
                    break;
                }

                case 'maploop': {
                    const mapWidth = rt.original_width || 6000;
                    const mapHeight = rt.original_height || 6000;
                    const loopSpeed = globalAngle * 0.15;

                    const individualProgress = (spreadFactor + loopSpeed) % 1.0;
                    const perimeter = (mapWidth * 2) + (mapHeight * 2);
                    const currentPos = individualProgress * perimeter;

                    if (currentPos < mapWidth) {
                        p.x = currentPos; p.y = 150;
                    } else if (currentPos < mapWidth + mapHeight) {
                        p.x = mapWidth - 150; p.y = currentPos - mapWidth;
                    } else if (currentPos < (mapWidth * 2) + mapHeight) {
                        p.x = mapWidth - (currentPos - (mapWidth + mapHeight)); p.y = mapHeight - 150;
                    } else {
                        p.x = 150; p.y = mapHeight - (currentPos - ((mapWidth * 2) + mapHeight));
                    }
                    break;
                }

                case 'singularity': {
                    const mouseX = rt.mouseX || me.x;
                    const mouseY = rt.mouseY || me.y;
                    const suctionAngle = globalAngle * 2 + spreadAngle;
                    p.x = mouseX + Math.cos(suctionAngle) * (80 + (i * 22));
                    p.y = mouseY + Math.sin(suctionAngle) * (80 + (i * 22));
                    break;
                }

                case 'dna': {
                    const backAngle = (me.angle || 0) + Math.PI;
                    const downstreamDistance = minimumSafeRadius + (Math.floor(i / 2) * separationSpacing);
                    const coreTrailX = me.x + Math.cos(backAngle) * downstreamDistance;
                    const coreTrailY = me.y + Math.sin(backAngle) * downstreamDistance;

                    const weaveWidth = 200 * Math.sin(pulseWave + (Math.floor(i / 2) * 0.5));
                    const sideAngle = backAngle + (Math.PI / 2);
                    const directionMultiplier = ((i % 2) === 0) ? 1 : -1;

                    p.x = coreTrailX + Math.cos(sideAngle) * (weaveWidth * directionMultiplier);
                    p.y = coreTrailY + Math.sin(sideAngle) * (weaveWidth * directionMultiplier);
                    break;
                }

                case 'atom': {
                    const shell = i % 3;
                    const atomAngle = globalAngle + (Math.floor(i / 3) * (Math.PI * 2 / 5));
                    let targetAngleX = atomAngle;
                    let targetAngleY = atomAngle;

                    if (shell === 1) targetAngleY += Math.PI / 3;
                    if (shell === 2) targetAngleX += Math.PI / 3;

                    p.x = me.x + Math.cos(targetAngleX) * (minimumSafeRadius + (shell * separationSpacing));
                    p.y = me.y + Math.sin(targetAngleY) * (minimumSafeRadius + (shell * separationSpacing));
                    break;
                }

                case 'star': {
                    const points = 5;
                    const pointIndex = i % points;
                    const fraction = Math.floor(i / points) / Math.max(1, Math.floor(enemies.length / points));

                    const angle1 = (pointIndex * (Math.PI * 2 / points)) + globalAngle;
                    const angle2 = (((pointIndex + 2) % points) * (Math.PI * 2 / points)) + globalAngle;

                    const x1 = me.x + Math.cos(angle1) * (minimumSafeRadius + 180);
                    const y1 = me.y + Math.sin(angle1) * (minimumSafeRadius + 180);
                    const x2 = me.x + Math.cos(angle2) * (minimumSafeRadius + 180);
                    const y2 = me.y + Math.sin(angle2) * (minimumSafeRadius + 180);

                    p.x = x1 + (x2 - x1) * fraction;
                    p.y = y1 + (y2 - y1) * fraction;
                    break;
                }

                case 'infinity': {
                    const scaleFactor = (minimumSafeRadius + 100) * 1.4;
                    const t = spreadAngle + (globalAngle * 0.8);

                    const infX = (scaleFactor * Math.cos(t)) / (1 + Math.sin(t) * Math.sin(t));
                    const infY = (scaleFactor * Math.sin(t) * Math.cos(t)) / (1 + Math.sin(t) * Math.sin(t));

                    p.x = me.x + infX;
                    p.y = me.y + infY;
                    break;
                }

                case 'square': {
                    const side = i % 4;
                    const steps = Math.floor(i / 4);
                    const maxSteps = Math.ceil(enemies.length / 4);
                    const perimeterRatio = steps / maxSteps;
                    const halfSize = minimumSafeRadius + 120;

                    if (side === 0) {
                        p.x = me.x - halfSize + (halfSize * 2 * perimeterRatio);
                        p.y = me.y - halfSize;
                    } else if (side === 1) {
                        p.x = me.x + halfSize;
                        p.y = me.y - halfSize + (halfSize * 2 * perimeterRatio);
                    } else if (side === 2) {
                        p.x = me.x + halfSize - (halfSize * 2 * perimeterRatio);
                        p.y = me.y + halfSize;
                    } else if (side === 3) {
                        p.x = me.x - halfSize;
                        p.y = me.y + halfSize - (halfSize * 2 * perimeterRatio);
                    }
                    break;
                }

                case 'warp': {
                    const trackingAngle = globalAngle + (i * 45);
                    p.x = me.x + Math.cos(trackingAngle) * (minimumSafeRadius + (Math.sin(pulseWave + i) * 380));
                    p.y = me.y + Math.sin(trackingAngle) * (minimumSafeRadius + (Math.cos(pulseWave + i) * 380));
                    break;
                }
            }
        }
    }

    const discovery = setInterval(() => {
        if (window.cr_getC2Runtime && window.cr_getC2Runtime()) {
            clearInterval(discovery);
            rt = window.cr_getC2Runtime();

            initUI();

            if (rt && typeof rt.tick === 'function') {
                const nativeTick = rt.tick;
                rt.tick = function () {
                    nativeTick.apply(this, arguments);
                    try { tickProcessingPipeline(); } catch (err) {}
                };
            }
        }
    }, 400);
})();