// ==UserScript== // @name FRHD Screenshot // @namespace http://tampermonkey.net/ // @version 0.1 // @description Take clean screenshots of tracks easily // @author 1s3k3b // @include /^https?://(www.)?freeriderhd.com/create/ // @require https://raw.githubusercontent.com/eligrey/FileSaver.js/master/dist/FileSaver.min.js // @grant none // ==/UserScript== (function main() { const lastHref = window.location.href; const reloadInv = setInterval(() => { if (lastHref !== window.location.href) { clearInterval(reloadInv); main(); } }, 1000); if (!/^https?:\/\/(www\.)?freeriderhd\.com\/create/.test(window.location.href)) return; const topInv = setInterval(() => { const top = document.querySelector('.topMenu'); if (!top) return; clearInterval(topInv); setInterval(() => { if (top.querySelector('#screenshot')) return; top.innerHTML += '
'; top.querySelector('#screenshot').onclick = async () => { const _drawBikeFrame = GameManager.game.currentScene.playerManager.firstPlayer._baseVehicle.drawBikeFrame.bind(GameManager.game.currentScene.playerManager.firstPlayer._baseVehicle); const _children = [...GameManager.game.currentScene.stage.children]; const score = GameManager.game.currentScene.score; for (const i in score) score[i] && (score[i].visible = false); GameManager.game.currentScene.stage.children = []; GameManager.game.currentScene.playerManager.firstPlayer._baseVehicle.drawBikeFrame = () => {}; await new Promise(r => { let x = false; createjs.Ticker.on('tick', () => { if (x) return; x = true; document.querySelector('canvas').toBlob(b => r(saveAs(b, 'frhd-track.png'))); }); }); for (const i in score) score[i] && (score[i].visible = true); GameManager.game.currentScene.stage.children = _children; GameManager.game.currentScene.playerManager.firstPlayer._baseVehicle.drawBikeFrame = _drawBikeFrame; }; }, 1000); }, 1000); })();