Invincible Wobble Mode FINAL

Modo Invincible con control total de potencia y velocidad + menú moderno

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey, Greasemonkey или Violentmonkey.

За да инсталирате този скрипт, трябва да инсталирате разширение, като например Tampermonkey .

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey или Violentmonkey.

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey или Userscripts.

За да инсталирате скрипта, трябва да инсталирате разширение като Tampermonkey.

За да инсталирате този скрипт, трябва да имате инсталиран скриптов мениджър.

(Вече имам скриптов мениджър, искам да го инсталирам!)

За да инсталирате този стил, трябва да инсталирате разширение като Stylus.

За да инсталирате този стил, трябва да инсталирате разширение като Stylus.

За да инсталирате този стил, трябва да инсталирате разширение като Stylus.

За да инсталирате този стил, трябва да имате инсталиран мениджър на потребителски стилове.

За да инсталирате този стил, трябва да имате инсталиран мениджър на потребителски стилове.

За да инсталирате този стил, трябва да имате инсталиран мениджър на потребителски стилове.

(Вече имам инсталиран мениджър на стиловете, искам да го инсталирам!)

// ==UserScript==
// @name         Invincible Wobble Mode FINAL
// @namespace    https://tu-namespace
// @version      5.0
// @description  Modo Invincible con control total de potencia y velocidad + menú moderno
// @match        *://*/*
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    // --- Estilos del menú y animación dinámica ---
    const style = document.createElement("style");
    style.textContent = `
        #invincibleMenu {
            position: fixed;
            top: 10px;
            left: 10px;
            background: rgba(25,25,25,0.9);
            padding: 14px;
            border-radius: 12px;
            color: white;
            font-family: Arial, sans-serif;
            font-size: 14px;
            z-index: 999999;
            width: 190px;
            display: flex;
            flex-direction: column;
            gap: 10px;
            box-shadow: 0 4px 12px rgba(0,0,0,0.45);
            border: 1px solid rgba(255,255,255,0.15);
            backdrop-filter: blur(6px);
        }

        #closeMenu {
            position: absolute;
            top: -8px;
            right: -8px;
            background: #ff4444;
            color: white;
            border: none;
            width: 22px;
            height: 22px;
            border-radius: 50%;
            cursor: pointer;
            font-size: 13px;
            font-weight: bold;
            line-height: 22px;
            text-align: center;
        }

        #invincibleBtn {
            background: #ffcc00;
            border: none;
            padding: 7px 14px;
            border-radius: 6px;
            cursor: pointer;
            font-weight: bold;
            transition: 0.2s;
        }

        #invincibleBtn:hover {
            background: #ffe066;
        }

        .sliderLabel {
            font-size: 12px;
            opacity: 0.8;
        }

        .slider {
            width: 100%;
        }

        #credits {
            font-size: 10px;
            opacity: 0.7;
            text-align: center;
        }

        .wobbleInvincible {
            animation: wobbleInv var(--wobbleSpeed, 0.1s) infinite ease-in-out;
        }

        @keyframes wobbleInv {
            0% { transform: rotate(0deg) scale(1); }
            20% { transform: rotate(var(--wobblePower, 10deg)) scale(1.1); }
            40% { transform: rotate(calc(var(--wobblePower, 10deg) * -1)) scale(1.1); }
            60% { transform: rotate(calc(var(--wobblePower, 10deg) * 1.2)) scale(1.15); }
            80% { transform: rotate(calc(var(--wobblePower, 10deg) * -1.2)) scale(1.15); }
            100% { transform: rotate(0deg) scale(1); }
        }
    `;
    document.head.appendChild(style);

    // --- Crear menú ---
    const menu = document.createElement("div");
    menu.id = "invincibleMenu";
    menu.innerHTML = `
        <button id="closeMenu">X</button>

        <button id="invincibleBtn">Invincible Mode</button>

        <div class="sliderLabel">Potencia</div>
        <input type="range" id="powerSlider" class="slider" min="1" max="10000" value="300">

        <div class="sliderLabel">Velocidad</div>
        <input type="range" id="speedSlider" class="slider" min="1" max="10000" value="100">

        <div id="credits">hecho por marcos</div>
    `;
    document.body.appendChild(menu);

    let active = false;

    const powerSlider = document.getElementById("powerSlider");
    const speedSlider = document.getElementById("speedSlider");

    // --- Actualizar variables CSS dinámicas ---
    function updateWobbleVars() {
        const power = powerSlider.value / 10;   // 1–10000 → 0.1–1000 grados
        const speed = speedSlider.value / 1000; // 1–10000 → 0.001–10s

        document.documentElement.style.setProperty("--wobblePower", power + "deg");
        document.documentElement.style.setProperty("--wobbleSpeed", speed + "s");
    }

    powerSlider.oninput = updateWobbleVars;
    speedSlider.oninput = updateWobbleVars;

    updateWobbleVars();

    // --- Botón cerrar ---
    document.getElementById("closeMenu").onclick = () => {
        menu.remove();
    };

    // --- Activar/desactivar efecto ---
    document.getElementById("invincibleBtn").onclick = () => {
        active = !active;

        const imgs = document.querySelectorAll("img");

        imgs.forEach(img => {
            if (active) {
                img.classList.add("wobbleInvincible");
            } else {
                img.classList.remove("wobbleInvincible");
            }
        });

        document.getElementById("invincibleBtn").textContent =
            active ? "Invincible Mode: ON" : "Invincible Mode";
    };
})();