// ==UserScript== // @name SOBERANA Wplace Overlay // @namespace http://tampermonkey.net/ // @version 0.1.2 // @description Overlay for Wplace // @author C3B // @match https://wplace.live/* // @icon https://soberana.tv/images/logo.svg // @license MIT // @grant none // @downloadURL none // ==/UserScript== (async function() { 'use strict'; const [chunk1, chunk2] = ["758", "1161"] const OVERLAY_MODES = ["overlay", "original"]; let overlayMode = OVERLAY_MODES[0]; let darken = false; const chunksString = `/${chunk1}/${chunk2}.png` let cachedOverlayImagePromise = null; const overlayImage = await getOverlayImage(); const overlayCanvas = new OffscreenCanvas(1000, 1000); const overlayCtx = overlayCanvas.getContext("2d"); overlayCtx.drawImage(overlayImage, 0, 0, 1000, 1000); const overlayData = overlayCtx.getImageData(0, 0, 1000, 1000); fetch = new Proxy(fetch, { apply: async (target, thisArg, argList) => { const urlString = typeof argList[0] === "object" ? argList[0].url : argList[0]; let url; try { url = new URL(urlString); } catch (e) { throw new Error("Invalid URL provided to fetch"); } if (url.hostname === "backend.wplace.live" && url.pathname.startsWith("/files/") && url.pathname.endsWith(chunksString)) { if (overlayMode !== "original") { const originalResponse = await target.apply(thisArg, argList); const originalBlob = await originalResponse.blob(); const originalImage = await blobToImage(originalBlob); const width = originalImage.width; const height = originalImage.height; const canvas = new OffscreenCanvas(width, height); const ctx = canvas.getContext("2d"); ctx.drawImage(originalImage, 0, 0, width, height); const originalData = ctx.getImageData(0, 0, width, height); const resultData = ctx.getImageData(0, 0, width, height); const d1 = originalData.data; const d2 = overlayData.data; const dr = resultData.data; for (let i = 0; i < d1.length; i += 4) { const isTransparent = d2[i] === 0 && d2[i + 1] === 0 && d2[i + 2] === 0 && d2[i + 3] === 0; const samePixel = d1[i] === d2[i] && d1[i + 1] === d2[i + 1] && d1[i + 2] === d2[i + 2] && d1[i + 3] === d2[i + 3]; if (samePixel && !isTransparent) { dr[i] = 0; dr[i + 1] = 255; dr[i + 2] = 0; dr[i + 3] = 255; } else if (!isTransparent) { dr[i] = d2[i]; dr[i + 1] = d2[i + 1]; dr[i + 2] = d2[i + 2]; dr[i + 3] = d2[i + 3]; } } ctx.putImageData(resultData, 0, 0); const mergedBlob = await canvas.convertToBlob(); return new Response(mergedBlob, { headers: { "Content-Type": "image/png" } }); } } return target.apply(thisArg, argList); } }); function blobToImage(blob) { return new Promise((resolve, reject) => { const img = new Image(); img.onload = () => resolve(img); img.onerror = reject; img.src = URL.createObjectURL(blob); }); } function loadImage(src) { return new Promise((resolve, reject) => { const img = new Image(); img.crossOrigin = "anonymous"; img.onload = () => resolve(img); img.onerror = reject; img.src = src; }); } function getOverlayImage() { if (!cachedOverlayImagePromise) { cachedOverlayImagePromise = loadImage("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA+gAAAPoCAYAAABNo9TkAAAACXBIWXMAAAsTAAALEwEAmpwYAAAjt0lEQVR4nO3dPcsj59mA4dEbQyCkCY8LF7tssz8rhRuD+6QNuyZt0gfcuMjP2sbkKVx42cYYUgS9RdBGlvUxI81Ip7THAYtsrzS6ZwrDqWs+Vuv1egAAAABu6/9uvQAAAABAoAMAAECCQAcAAIAAgQ4AAAABAh0AAAACBDoAAAAECHQAAAAIEOgAAAAQINABAAAgQKADAABAgEAHAACAAIEOAAAAAQIdAAAAAgQ6AAAABAh0AAAACBDoAAAAECDQAQAAIECgAwAAQIBABwAAgACBDgAAAAECHQAAAAIEOgAAAAQIdAAAAAgQ6AAAABAg0AEAACBAoAMAAECAQAcAAIAAgQ4AAAABAh0AAAACBDoAAAAECHQAAAAIEOgAAAAQINABAAAgQKADAABAgEAHAACAAIEOAAAAAQIdAAAAAgQ6AAAABAh0AAAACBDoAAAAECDQAQAAIECgAwAAQIBABwAAgACBDgAAAAECHQAAAAIEOgAAAAQIdAAAAAgQ6AAAABAg0AEAACBAoAMAAECAQAcAAIAAgQ4AAAABAh0AAAACBDoAAAAECHQAAAAIEOgAAAAQINABAAAgQKADAABAgEAHAACAAIEOAAAAAQIdAAAAAgQ6AAAABAh0AAAACBDoAAAAECDQAQAAIECgAwAAQIBABwAAgACBDgAAAAECHQAAAAIEOgAAAAQIdAAAAAgQ6AAAABAg0AEAACBAoAMAAECAQAcAAIAAgQ4AAAABAh0AAAACBDoAAAAECHQAAAAIEOgAAAAQINABAAAgQKADAABAgEAHAACAAIEOAAAAAQIdAAAAAgQ6AAAABAh0AAAACBDoAAAAECDQAQAAIECgAwAAQIBABwAAgACBDgAAAAECHQAAAAIEOgAAAAQIdAAAAAgQ6AAAABAg0AEAACBAoAMAAECAQAcAAIAAgQ4AAAABAh0AAAACBDoAAAAECHQAAAAIEOgAAAAQINABAAAgQKADAABAgEAHAACAAIEOAAAAAQIdAAAAAgQ6AAAABAh0AAAACBDoAAAAECDQAQAAIECgAwAAQIBABwAAgACBDgAAAAECHQAAAAIEOgAAAAQIdAAAAAgQ6AAAABAg0AEAACBAoAMAAECAQAcAAIAAgQ4AAAABAh0AAAACBDoAAAAECHQAAAAIEOgAAAAQINABAAAgQKADAABAgEAHAACAAIEOAAAAAQIdAAAAAgQ6AAAABAh0AAAACBDoAAAAECDQAQAAIECgAwAAQIBABwAAgACBDgAAAAECHQAAAAIEOgAAAAQIdAAAAAgQ6AAAABAg0AEAACBAoAMAAECAQAcAAIAAgQ4AAAABAh0AAAACBDoAAAAECHQAAAAIEOgAAAAQINABAAAgQKADAABAgEAHAACAAIEOAAAAAQIdAAAAAgQ6AAAABAh0AAAACBDoAAAAECDQAQAAIECgAwAAQIBABwAAgACBDgAAAAECHQAAAAIEOgAAAAQIdAAAAAgQ6AAAABAg0AEAACBAoAMAAECAQAcAAIAAgQ4AAAABAh0AAAACBDoAAAAECHQAAAAIEOgAAAAQINABAAAgQKADAABAgEAHAACAAIEOAAAAAQIdAAAAAgQ6AAAABAh0AAAACBDoAAAAECDQAQAAIECgAwAAQIBABwAAgACBDgAAAAECHQAAAAIEOgAAAAQIdAAAAAgQ6AAAABAg0AEAACBAoAMAAECAQAcAAIAAgQ4AAAABAh0AAAACBDoAAAAECHQAAAAIEOgAAAAQINABAAAgQKADAABAgEAHAACAAIEOAAAAAQIdAAAAAgQ6AAAABAh0AAAACBDoAAAAECDQAQAAIECgAwAAQIBABwAAgACBDgAAAAECHQAAAAIEOgAAAAQIdAAAAAgQ6AAAABAg0AEAACBAoAMAAECAQAcAAIAAgQ4AAAABAh0AAAACBDoAAAAECHQAAAAIEOgAAAAQINABAAAgQKADAABAgEAHAACAAIEOAAAAAQIdAAAAAgQ6AAAABAh0AAAACBDoAAAAECDQAQAAIECgAwAAQIBABwAAgACBDgAAAAECHQAAAAIEOgAAAAQIdAAAAAgQ6AAAABAg0AEAACBAoAMAAECAQAcAAIAAgQ4AAAABAh0AAAACBDoAAAAECHQAAAAIEOgAAAAQINABAAAgQKADAABAgEAHAACAAIEOAAAAAQIdAAAAAgQ6AAAABAh0AAAACBDoAAAAECDQAQAAIECgAwAAQIBABwAAgACBDgAAAAECHQAAAAIEOgAAAAQIdAAAAAgQ6AAAABAg0AEAACBAoAMAAECAQAcAAIAAgQ4AAAABAh0AAAACBDoAAAAECHQAAAAIEOgAAAAQINABAAAgQKADAABAgEAHAACAAIEOAAAAAQIdAAAAAgQ6AAAABAh0AAAACBDoAAAAECDQAQAAIECgAwAAQIBABwAAgACBDgAAAAECHQAAAAIEOgAAAAQIdAAAAAgQ6AAAABAg0AEAACBAoAMAAECAQAcAAIAAgQ4AAAABAh0AAAACBDoAAAAECHQAAAAIEOgAAAAQINABAAAgQKADAABAgEAHAACAAIEOAAAAAQIdAAAAAgQ6AAAABAh0AAAACBDoAAAAECDQAQAAIECgAwAAQIBABwAAgACBDgAAAAECHQAAAAIEOgAAAAQIdAAAAAgQ6AAAABAg0AEAACBAoAMAAECAQAcAAIAAgQ4AAAABAh0AAAACBDoAAAAECHQAAAAIEOgAAAAQINABAAAgQKADAABAgEAHAACAAIEOAAAAAQIdAAAAAgQ6AAAABAh0AAAACBDoAAAAECDQAQAAIECgAwAAQIBABwAAgACBDgAAAAECHQAAAAIEOgAAAAQIdAAAAAgQ6AAAABAg0AEAACBAoAMAAECAQAcAAIAAgQ4AAAABAh0AAAACBDoAAAAECHQAAAAIEOgAAAAQINABAAAgQKADAABAgEAHAACAAIEOAAAAAQIdAAAAAgQ6AAAABAh0AAAACBDoAAAAECDQAQAAIECgAwAAQIBABwAAgACBDgAAAAECHQAAAAIEOgAAAAQIdAAAAAgQ6AAAABAg0AEAACBAoAMAAECAQAcAAIAAgQ4AAAABAh0AAAACBDoAAAAECHQAAAAIEOgAAAAQINABAAAgQKADAABAgEAHAACAAIEOAAAAAQIdAAAAAgQ6AAAABAh0AAAACBDoAAAAECDQAQAAIECgAwAAQIBABwAAgACBDgAAAAECHQAAAAIEOgAAAAQIdAAAAAgQ6AAAABAg0AEAACBAoAMAAECAQAcAAIAAgQ4AAAABAh0AAAACBDoAAAAECHQAAAAIEOgAAAAQINABAAAgQKADAABAgEAHAACAAIEOAAAAAQIdAAAAAgQ6AAAABAh0AAAACBDoAAAAECDQAQAAIECgAwAAQIBABwAAgACBDgAAAAECHQAAAAIEOgAAAAQIdAAAAAgQ6AAAABAg0AEAACBAoAMAAECAQAcAAIAAgQ4AAAABAh0AAAACBDoAAAAECHQAAAAIEOgAAAAQINABAAAgQKADAABAgEAHAACAAIEOAAAAAQIdAAAAAgQ6AAAABAh0AAAACBDoAAAAECDQAQAAIECgAwAAQIBABwAAgACBDgAAAAECHQAAAAIEOgAAAAQIdAAAAAgQ6AAAABAg0AEAACBAoAMAAECAQAcAAIAAgQ4AAAABAh0AAAACBDoAAAAECHQAAAAIEOgAAAAQINABAAAgQKADAABAgEAHAACAAIEOAAAAAQIdAAAAAgQ6AAAABAh0AAAACBDoAAAAECDQAQAAIECgAwAAQIBABwAAgACBDgAAAAECHQAAAAIEOgAAAAQIdAAAAAgQ6AAAABAg0AEAACBAoAMAAECAQAcAAIAAgQ4AAAABAh0AAAACBDoAAAAECHQAAAAIEOgAAAAQINABAAAgQKADAABAgEAHAACAAIEOAAAAAQIdAAAAAgQ6AAAABAh0AAAACBDoAAAAECDQAQAAIECgAwAAQIBABwAAgACBDgAAAAECHQAAAAIEOgAAAAQIdAAAAAgQ6AAAABAg0AEAACBAoAMAAECAQAcAAIAAgQ4AAAABAh0AAAACBDoAAAAECHQAAAAIEOgAAAAQINABAAAgQKADAABAgEAHAACAAIEOAAAAAQIdAAAAAgQ6AAAABAh0AAAACBDoAAAAECDQAQAAIECgAwAAQIBABwAAgACBDgAAAAECHQAAAAIEOgAAAAQIdAAAAAgQ6AAAABAg0AEAACBAoAMAAECAQAcAAIAAgQ4AAAABAh0AAAACBDoAAAAECHQAAAAIEOgAAAAQINABAAAgQKADAABAgEAHAACAAIEOAAAAAQIdAAAAAgQ6AAAABAh0AAAACBDoAAAAECDQAQAAIECgAwAAQIBABwAAgACBDgAAAAECHQAAAAIEOgAAAAQIdAAAAAgQ6AAAABAg0AEAACBAoAMAAECAQAcAAIAAgQ4AAAABAh0AAAACBDoAAAAECHQAAAAIEOgAAAAQINABAAAgQKADAABAgEAHAACAAIEOAAAAAQIdAAAAAgQ6AAAABAh0AAAACBDoAAAAECDQAQAAIECgAwAAQIBABwAAgACBDgAAAAECHQAAAAIEOgAAAAQIdAAAAAgQ6AAAABAg0AEAACBAoAMAAECAQAcAAIAAgQ4AAAABAh0AAAACBDoAAAAECHQAAAAIEOgAAAAQINABAAAgQKADAABAgEAHAACAAIEOAAAAAQIdAAAAAgQ6AAAABAh0AAAACBDoAAAAECDQAQAAIECgAwAAQIBABwAAgACBDgAAAAECHQAAAAIEOgAAAAQIdAAAAAgQ6AAAABAg0AEAACBAoAMAAECAQAcAAIAAgQ4AAAABAh0AAAACBDoAAAAECHQAAAAIEOgAAAAQINABAAAgQKADAABAgEAHAACAAIEOAAAAAQIdAAAAAgQ6AAAABAh0AAAACBDoAAAAECDQAQAAIECgAwAAQIBABwAAgACBDgAAAAECHQAAAAIEOgAAAAQIdAAAAAgQ6AAAABAg0AEAACBAoAMAAECAQAcAAIAAgQ4AAAABAh0AAAACBDoAAAAECHQAAAAIEOgAAAAQINABAAAgQKADAABAgEAHAACAAIEOAAAAAQIdAAAAAgQ6AAAABAh0AAAACBDoAAAAECDQAQAAIECgAwAAQIBABwAAgACBDgAAAAECHQAAAAIEOgAAAAQIdAAAAAgQ6AAAABAg0AEAACBAoAMAAECAQAcAAIAAgQ4AAAABAh0AAAACBDoAAAAECHQAAAAIEOgAAAAQINABAAAgQKADAABAgEAHAACAAIEOAAAAAQIdAAAAAgQ6AAAABAh0AAAACBDoAAAAECDQAQAAIECgAwAAQIBABwAAgACBDgAAAAECHQAAAAIEOgAAAAQIdAAAAAgQ6AAAABAg0AEAACBAoAMAAECAQAcAAIAAgQ4AAAABAh0AAAACBDoAAAAECHQAAAAIEOgAAAAQINABAAAgQKADAABAgEAHAACAAIEOAAAAAQIdAAAAAgQ6AAAABAh0AAAACBDoAAAAECDQAQAAIECgAwAAQIBABwAAgACBDgAAAAECHQAAAAIEOgAAAAQIdAAAAAgQ6AAAABAg0AEAACBAoAMAAECAQAcAAIAAgQ4AAAABAh0AAAACBDoAAAAECHQAAAAIEOgAAAAQINABAAAgQKADAABAgEAHAACAAIEOAAAAAQIdAAAAAgQ6AAAABAh0AAAACBDoAAAAECDQAQAAIECgAwAAQIBABwAAgACBDgAAAAECHQAAAAIEOgAAAAQIdAAAAAgQ6AAAABAg0AEAACBAoAMAAECAQAcAAIAAgQ4AAAABAh0AAAACBDoAAAAECHQAAAAIEOgAAAAQINABAAAgQKADAABAgEAHAACAAIEOAAAAAQIdAAAAAgQ6AAAABAh0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") } return cachedOverlayImagePromise; } function patchUI() { if (document.getElementById("overlay-blend-button")) { return; } let blendButton = document.createElement("button"); blendButton.id = "overlay-blend-button"; blendButton.textContent = overlayMode.charAt(0).toUpperCase() + overlayMode.slice(1); blendButton.style.backgroundColor = "#0e0e0e7f"; blendButton.style.color = "white"; blendButton.style.border = "solid"; blendButton.style.borderColor = "#1d1d1d7f"; blendButton.style.borderRadius = "4px"; blendButton.style.padding = "5px 10px"; blendButton.style.cursor = "pointer"; blendButton.style.backdropFilter = "blur(2px)"; blendButton.addEventListener("click", () => { overlayMode = OVERLAY_MODES[(OVERLAY_MODES.indexOf(overlayMode) + 1) % OVERLAY_MODES.length]; blendButton.textContent = `${overlayMode.charAt(0).toUpperCase() + overlayMode.slice(1)}`; }); const buttonContainer = document.querySelector("div.gap-4:nth-child(1) > div:nth-child(2)"); const leftSidebar = document.querySelector("html body div div.disable-pinch-zoom.relative.h-full.overflow-hidden.svelte-6wmtgk div.absolute.right-2.top-2.z-30 div.flex.flex-col.gap-4.items-center"); if (buttonContainer) { buttonContainer.appendChild(blendButton); buttonContainer.classList.remove("items-center"); buttonContainer.classList.add("items-end"); } if (leftSidebar) { leftSidebar.classList.add("items-end"); leftSidebar.classList.remove("items-center"); } } const observer = new MutationObserver(() => { patchUI(); }); observer.observe(document.querySelector("div.gap-4:nth-child(1)"), { childList: true, subtree: true }); patchUI(); })();