☰

Omoggle Canvas Overlay (Hyper Mesh v23)

Improved facial mesh renderer with lighting depth + optimized texture system

K instalaci tototo skriptu si budete muset nainstalovat rozšíření jako Tampermonkey, Greasemonkey nebo Violentmonkey.

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

K instalaci tohoto skriptu si budete muset nainstalovat rozšíření jako Tampermonkey nebo Violentmonkey.

K instalaci tohoto skriptu si budete muset nainstalovat rozšíření jako Tampermonkey nebo Userscripts.

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

K instalaci tohoto skriptu si budete muset nainstalovat manažer uživatelských skriptů.

(Už mám manažer uživatelských skriptů, nechte mě ho nainstalovat!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

(Už mám manažer uživatelských stylů, nechte mě ho nainstalovat!)

// ==UserScript==
// @name         Omoggle Canvas Overlay (Hyper Mesh v23)
// @namespace    http://tampermonkey.net/
// @version      23.0
// @description  Improved facial mesh renderer with lighting depth + optimized texture system
// @author       Alex
// @match        *://*.omoggle.com/*
// @grant        none
// @run-at       document-start
// ==/UserScript==

(() => {
    'use strict';

    let enabled = false;

    // ===== MAIN CANVAS =====
    const canvas = document.createElement("canvas");
    canvas.width = 640;
    canvas.height = 480;
    const ctx = canvas.getContext("2d", { alpha: false });

    // ===== PREBUILT SKIN NOISE (IMPORTANT OPTIMIZATION) =====
    const noiseCanvas = document.createElement("canvas");
    noiseCanvas.width = 640;
    noiseCanvas.height = 480;
    const nctx = noiseCanvas.getContext("2d");

    (function generateNoise() {
        const img = nctx.createImageData(noiseCanvas.width, noiseCanvas.height);
        const d = img.data;

        for (let i = 0; i < d.length; i += 4) {
            const v = (Math.random() * 22) | 0;
            d[i] = v;
            d[i + 1] = v;
            d[i + 2] = v;
            d[i + 3] = 14; // subtle grain
        }

        nctx.putImageData(img, 0, 0);
    })();

    let raf = null;

    // ===== RENDER LOOP =====
    function render(t) {
        if (!enabled) return;

        const time = t * 0.001;

        const cx = 320 + Math.sin(time * 0.6) * 1.2;
        const cy = 212 + Math.cos(time * 0.8) * 1.0;

        // ===== BACKGROUND =====
        const bg = ctx.createLinearGradient(0, 0, 0, canvas.height);
        bg.addColorStop(0, "#060606");
        bg.addColorStop(1, "#000");

        ctx.fillStyle = bg;
        ctx.fillRect(0, 0, canvas.width, canvas.height);

        // ===== SKIN BASE LIGHTING =====
        const skin = ctx.createRadialGradient(cx - 25, cy - 50, 20, cx, cy, 180);
        skin.addColorStop(0, "#f3caa2");
        skin.addColorStop(0.45, "#b07a55");
        skin.addColorStop(1, "#2a1a12");

        ctx.fillStyle = skin;
        ctx.beginPath();
        ctx.ellipse(cx, cy + 12, 88, 140, 0, 0, Math.PI * 2);
        ctx.fill();

        // ===== APPLY PREBUILT NOISE (FAST TEXTURE) =====
        ctx.drawImage(noiseCanvas, 0, 0);

        // ===== CHEEK SHADING =====
        const cheekShadow = ctx.createRadialGradient(cx - 45, cy + 20, 10, cx - 45, cy + 20, 85);
        cheekShadow.addColorStop(0, "rgba(0,0,0,0.22)");
        cheekShadow.addColorStop(1, "rgba(0,0,0,0)");

        ctx.fillStyle = cheekShadow;
        ctx.beginPath();
        ctx.ellipse(cx - 45, cy + 30, 40, 60, 0, 0, Math.PI * 2);
        ctx.fill();

        ctx.beginPath();
        ctx.ellipse(cx + 45, cy + 30, 40, 60, 0, 0, Math.PI * 2);
        ctx.fill();

        // ===== EYES (REALISTIC DEPTH) =====
        const drawEye = (side) => {
            const ex = cx + side * 52;
            const ey = cy - 18;

            // socket
            ctx.fillStyle = "rgba(0,0,0,0.35)";
            ctx.beginPath();
            ctx.ellipse(ex, ey, 22, 10, side * 0.2, 0, Math.PI * 2);
            ctx.fill();

            // eyeball
            ctx.fillStyle = "#f2f2f2";
            ctx.beginPath();
            ctx.ellipse(ex, ey, 18, 7, side * 0.15, 0, Math.PI * 2);
            ctx.fill();

            // pupil
            ctx.fillStyle = "#111";
            ctx.beginPath();
            ctx.arc(ex + side * 2, ey, 3, 0, Math.PI * 2);
            ctx.fill();

            // highlight
            ctx.fillStyle = "rgba(255,255,255,0.7)";
            ctx.beginPath();
            ctx.arc(ex - 3, ey - 2, 1.5, 0, Math.PI * 2);
            ctx.fill();
        };

        drawEye(-1);
        drawEye(1);

        // ===== NOSE (soft gradient depth) =====
        const nose = ctx.createLinearGradient(cx, cy + 10, cx, cy + 60);
        nose.addColorStop(0, "rgba(0,0,0,0.15)");
        nose.addColorStop(1, "rgba(0,0,0,0.45)");

        ctx.strokeStyle = nose;
        ctx.lineWidth = 3;
        ctx.beginPath();
        ctx.moveTo(cx, cy + 18);
        ctx.lineTo(cx - 4, cy + 40);
        ctx.lineTo(cx + 2, cy + 54);
        ctx.stroke();

        // ===== MOUTH =====
        ctx.strokeStyle = "rgba(0,0,0,0.75)";
        ctx.lineWidth = 4;

        ctx.beginPath();
        ctx.moveTo(cx - 30, cy + 48);
        ctx.quadraticCurveTo(cx, cy + 44, cx + 30, cy + 48);
        ctx.stroke();

        ctx.strokeStyle = "rgba(255,255,255,0.08)";
        ctx.beginPath();
        ctx.moveTo(cx - 26, cy + 52);
        ctx.quadraticCurveTo(cx, cy + 56, cx + 26, cy + 52);
        ctx.stroke();

        raf = requestAnimationFrame(render);
    }

    function start() {
        if (!raf) raf = requestAnimationFrame(render);
    }

    function stop() {
        if (raf) cancelAnimationFrame(raf);
        raf = null;
    }

    // ===== WEBGL HOOK =====
    function hookGL(proto) {
        const original = proto.texImage2D;

        proto.texImage2D = function (...args) {
            const last = args[args.length - 1];

            if (enabled && last instanceof HTMLVideoElement) {
                const gl = this;

                const t = performance.now();
                render(t);

                return original.call(
                    gl,
                    args[0], args[1], args[2],
                    args[3], args[4],
                    canvas
                );
            }

            return original.apply(this, args);
        };
    }

    if (window.WebGLRenderingContext) hookGL(WebGLRenderingContext.prototype);
    if (window.WebGL2RenderingContext) hookGL(WebGL2RenderingContext.prototype);

    // ===== UI =====
    function injectUI() {
        if (document.getElementById("overlay-ui")) return;

        const ui = document.createElement("div");
        ui.id = "overlay-ui";

        Object.assign(ui.style, {
            position: "fixed",
            top: "20px",
            left: "20px",
            zIndex: 9999999,
            background: "#000",
            border: "2px solid #00ff88",
            borderRadius: "12px",
            padding: "12px",
            width: "240px",
            fontFamily: "monospace",
            color: "#00ff88"
        });

        const title = document.createElement("div");
        title.textContent = "Hyper Mesh Renderer";
        title.style.marginBottom = "10px";

        const btn = document.createElement("button");
        btn.textContent = "Enable";
        btn.style.cssText = `
            width: 100%;
            padding: 10px;
            border: none;
            border-radius: 6px;
            cursor: pointer;
            font-weight: bold;
            background: #00ff88;
            color: #000;
        `;

        btn.onclick = () => {
            enabled = !enabled;

            if (enabled) {
                btn.textContent = "Disable";
                btn.style.background = "#fff";
                start();
            } else {
                btn.textContent = "Enable";
                btn.style.background = "#00ff88";
                stop();
            }
        };

        ui.appendChild(title);
        ui.appendChild(btn);
        document.body.appendChild(ui);
    }

    const observer = new MutationObserver(injectUI);
    observer.observe(document.documentElement, { childList: true, subtree: true });
})();