// ==UserScript== // @name DigDig.IO Minimap // @namespace http://tampermonkey.net/ // @version 0.0.3 // @description Minimap for digdig.io // @author Zertalious (Zert) // @match *://digdig.io/* // @icon https://www.google.com/s2/favicons?domain=digdig.io // @require https://cdn.jsdelivr.net/gh/Qwokka/WAIL@9ed21abc43045e19f9b3756de109a6e361fb9292/wail.js // @downloadURL none // ==/UserScript== const _instantiateStreaming = WebAssembly.instantiateStreaming; WebAssembly.instantiateStreaming = function () { return _instantiateStreaming( new Response() ); } const _instantiate = WebAssembly.instantiate; WebAssembly.instantiate = function ( buffer, imports ) { const array = new Uint8Array( buffer ); find( array, [ OP_SELECT, OP_F64_PROMOTE_F32, OP_TEE_LOCAL, - 1, OP_GET_LOCAL, - 1, OP_F64_MUL, OP_F64_ADD, OP_F64_GE, OP_BR_IF, 0 ], function ( start, end ) { array[ end - 1 ] = OP_DROP; array[ end ] = OP_NOP; } ); return _instantiate( buffer, imports ); } function find( array, search, callback ) { main: for ( let i = 0; i < array.length; i ++ ) { for ( let j = 0; j < search.length; j ++ ) { if ( search[ j ] !== - 1 && array[ i + j ] !== search[ j ] ) { continue main; } } callback( i, i + search.length - 1 ); } } function Float32ToArray( x ) { return new Uint8Array( new Float32Array( [ x ] ).buffer ); } function Float64ToArray( x ) { return new Uint8Array( new Float64Array( [ x ] ).buffer ); } const CTX = CanvasRenderingContext2D.prototype; let temp; CTX.arc = new Proxy( CTX.arc, { apply( target, ctx, args ) { if ( [ 25, 28, 3, 50, 9 ].indexOf( args[ 2 ] ) === - 1 && ctx.fillStyle === '#222222' ) { temp = args; } return Reflect.apply( ...arguments ); } } ); CTX.fill = new Proxy( CTX.fill, { apply( target, ctx, args ) { Reflect.apply( ...arguments ); if ( temp ) { const [ x, y, r ] = temp; temp = null; const size = 50; const pointSize = 2; ctx.save(); ctx.globalAlpha = 0.8; ctx.translate( 10 + size, ctx.canvas.height - 10 - size ); ctx.beginPath(); ctx.arc( 0, 0, size, 0, Math.PI * 2 ); ctx.fillStyle = '#111'; ctx.fill(); ctx.beginPath(); const a = size - pointSize; ctx.arc( ( window.innerWidth / 2 - x ) / r * a, ( window.innerHeight / 2 - y ) / r * a, 2, 0, Math.PI * 2 ); ctx.fillStyle = '#fff'; ctx.fill(); ctx.restore(); ctx.beginPath(); } } } );