您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
THE BEST CHROME DINO HACK: SET SPEED, KILL PLAYER, ESP EXPLOIT, NO-CLIP, TRACERS, TELEPORT, FLY +MORE EXPLOITS
// ==UserScript== // @name [NEW UPDATE] TusDino || BEST CHROME DINO GAME T-REX MOD MENU HACK CHEAT - (0.17.4) // @namespace https://github.com/nonumbershere/TusDino // @homepageURL https://github.com/Fault-Utilities/TusDino-Chrome-Dino-Mod-Menu/ // @supportURL https://github.com/Fault-Utilities/TusDino-Chrome-Dino-Mod-Menu/issues // @homepage https://discord.gg/6eaDrx5J9s // @version 0.17.4 // @dark-mode no - Enables or disables if you want to active the dark mode instantly when loading the page (on/off) // @show-discord no - Shows or hides the discord alert message on the start (yes/no) // @description THE BEST CHROME DINO HACK: SET SPEED, KILL PLAYER, ESP EXPLOIT, NO-CLIP, TRACERS, TELEPORT, FLY +MORE EXPLOITS // @author Lapide (nonumbershere) // @license MIT // @match *://chromedino.com/* // @match *://dino-chrome.com/* // @match *://tuckercraig.com/dino/* // @match *://elgoog.im/t-rex/* // @match *://offline-dino-game.firebaseapp.com/ // @match *://www.dinogame.net/* // @match *://elgoog.im/t-rex/v2/* // @match *://nointernetgame.com/* // @match *://chromedino.io/ // @match *://trex-runner.com/* // @match *://fivesjs.skipser.com/trex-game/ // @require https://cdn.jsdelivr.net/npm/sweetalert2@11 // @icon https://github.com/Case-Clicker-2-Utilities/TusDino-Chrome-Dino-Mod-Menu/blob/main/assets/Logo.png?raw=true // @run-at document-start // @grant unsafeWindow // @grant GM_info // @grant GM_setValue // @grant GM_getValue // ==/UserScript== // NOTE: THE MOST SUPPORTED SITE IS: chromedino.com // THE SCRIPT MIGHT BE BUGGY ON OTHERS /* Slight UI Change: Make texts bolder & Changed the toggle boxs font color to be easier to read Changed tab: Others to Miscs Added What News alert Added Set Double Dino Size Added Continue Death Added Auto Continue Death Added Set Jump Height Added Set Drop Velocity Added Version Checker & Multiple Script Detection Removed a few supported pages */ (function () { // Sorry if the code is a bit bad or unreadable, just trying to code as easy as possible var window = unsafeWindow; var isGithub = false; var isGreasyfork = true; // This code get custom variables from metablocks window.getMetablockData = function getMetablockData() { var jj = GM_info.scriptMetaStr; var m = jj.slice(18, jj.length - 19) m = m.split('\n'); var f = ''; for (var i1 = 0; i1 < m.length; ++i1) { f += m[i1].replace('// ', '') + '\n'; } f = f.slice(0, f.length - 1).split('\n') var mm = []; for (var i = 0; i < f.length; ++i) { var unk = {}; unk.data = (f[i].replace(f[i].split(' ')[0], '').replace(f[i].replace(f[i].split(' ')[0], '').slice(0, f[i].replace(f[i].split(' ')[0], '').indexOf(f[i].replace(f[i].split(' ')[0], '').replaceAll(' ', '')[0]), ''), '')); unk.block = (f[i].replace('@', '').split(' ')[0]); mm.push(unk) } return mm; } // Duplicate script detection function generateRandomNumber() { return Math.floor(Math.random() * 1000000000).toString() + Math.floor(Math.random() * 1000000000).toString() + Math.floor(Math.random() * 1000000000).toString() + Math.floor(Math.random() * 1000000000).toString() + Math.floor(Math.random() * 1000000000).toString(); } if (!window.calledDetection) window.calledDetection = false; if (window.usingTusdino && window.usingTusdino.t && window.tusdinoType && !window.calledDetection) { if (!window.calledDetection) alert("We detected there "+(tusdinoType > 1 ? "are" : "is") + " "+ tusdinoType + " duplicate script"+(tusdinoType > 1 ? "s" : "")+" of Tusdino, please delete all of them and install the latest version to avoid confusion and bugs."); window.calledDetection = true; } var myId = btoa(generateRandomNumber()); window.usingTusdino = {t: true, version: GM_info.script.version, id: myId}; if (!window._tusdinos) window._tusdinos = []; window._tusdinos.push(usingTusdino); if (!window.tusdinoType) window.tusdinoType = 0; ++tusdinoType; if (!window.calledDetection || isLatestVersion) { // After script detection console.log("Running Tusdino..."); var showDiscord = ((typeof getMetablockData().find((t) => t.block == 'show-discord') != typeof undefined) ? (getMetablockData().find((t) => t.block == 'show-discord').data.startsWith('y')) : (true));; var info_ = GM_info; // Loading var supported = ['chromedino.com', 'dino-chrome.com', 'tuckercraig.com/dino', 'elgoog.im/t-rex', 'www.dinogame.net', 'elgoog.im/t-rex/v2', 'nointernetgame.com', 'chromedino.io', 'trex-runner.com', 'fivesjs.skipser.com/trex-game']; function isSupported(gameUrl) { return supported[gameUrl] } var whatsnewpage = `/pointSlight UI Change: Make texts bolder & Changed the toggle boxs font color to be easier to read/point-end/pointChanged tab: Others to Miscs/point-end/pointAdded What News alert/point-end/pointAdded Set Double Dino Size/point-end/pointAdded Continue Death/point-end/point Added Auto Continue Death/point-end/pointAdded Set Jump Height/point-end/pointAdded Set Drop Velocity/point-end/point Added Version Checker & Multiple Script Detection/point-end/point Removed a few supported pages/point-end`; var imageContinue = new Image(60,45); imageContinue.src='https://cdn.discordapp.com/attachments/1091299425277714502/1093634225351168020/continue.png'; // Cheat var docoldEv = document.addEventListener; var winoldEv = window.addEventListener; function cont() { if (typeof Runner != typeof undefined) { function applyScript(src) { var b = document.createElement("script"); b.src = src; document.body.append(b); b.remove(); } const HSLToRGB = (h, s, l) => { s /= 100; l /= 100; const k = (n) => (n + h / 30) % 12; const a = s * Math.min(l, 1 - l); const f = (n) => l - a * Math.max(-1, Math.min(k(n) - 3, Math.min(9 - k(n), 1))); return [255 * f(0), 255 * f(8), 255 * f(4)]; }; applyScript("https://cdn.jsdelivr.net/npm/toastify-js"); applyScript( "https://raw.githubusercontent.com/Fault-Utilities/TusDino-Chrome-Dino-Mod-Menu/main/assets/autorun.js" ); var oldKeyDown = Runner.instance_.onKeyDown; var oldstartJump = Runner.instance_.tRex.startJump; // Addons var npso = 0; Runner.instance_.gameOver = function() { this.playSound(this.soundFx.HIT); vibrate(200); this.stop(); this.crashed = true; this.distanceMeter.acheivement = false; var cscr = document.getElementById("currentScore"); cscr.innerText = currentScore; var sb = document.getElementById("shareBlock"); sb.style.display = 'none'; // block this.tRex.update(100, Trex.status.CRASHED); if (!this.gameOverPanel) { this.gameOverPanel = new GameOverPanel(this.canvas, this.spriteDef.TEXT_SPRITE, this.spriteDef.RESTART, this.dimensions) } else { this.gameOverPanel.draw() } if (this.distanceRan > this.highestScore) { this.highestScore = Math.ceil(this.distanceRan); this.distanceMeter.setHighScore(this.highestScore); currentScore = Math.round(this.highestScore * 0.025); cscr.innerText = currentScore; var score_d = 0; if (document.getElementById("score-5") !== null) { score_d = document.getElementById("score-5").innerHTML } if (currentScore > score_d) { var xhr = new XMLHttpRequest(); xhr.open('GET', '/inc/check.php?score=' + currentScore, false); xhr.send(); if (xhr.status != 200) {} else { if (xhr.responseText != '') { if (user_name == '') { user_name = prompt(xhr.responseText, 'Anonym'); if (user_name == 'null' || user_name == '') { user_name = 'Anonym' } } else { alert(xhr.responseText) } xhr.open('GET', '/inc/set.php?name=' + user_name + '&score=' + currentScore, false); xhr.send(); //location.reload() } } } } this.time = getTimeStamp() } unsafeWindow.tusdino = { cheats: { autoplayer: false , autoContinueDeath: false , fly: false , walk: false , size: 1 , allowFlyMode: false , rainbowSquarePlayer: false , esp: false , objectEsp: false , tracer: false , notifier: false , instantrespawn: false , noobstacles: false , arc: false , autofocus: false , glide: false , invisibility: false , noclip: false , obstacleBypass: false , obstacleFloat: false , duckAndJump: false , glow: false , bhop: false , rainbowglow: false , obliterate: false , mute: false , forcepause: false , stormcloud: false , airjump: false , duckjump: false , watermark: true , lazervisual: false , lazer: false , lazerv: false , } , whatsnew: function(isOld) { tusdino.alert(" /color^#CF9FFF^What's new/color-end in the /color^#855dff^ TusDino/color-end /color^lightblue^ Update /color-end /color^dodgerblue^ "+tusdino.info.version+" /color-end", whatsnewpage) }, alert: function alert_( title = "" , description = "" , alertonclick = function () {} ) { tusdino.logs.success("Showing alert box (" + title + ")"); var styl = document.createElement("style"); styl.innerHTML = "*:not(body,head,center,script,html,.alertbox,#pages,.standard-nav,#loading,#menu,.alertbox *) {filter:blur(1px);pointer-events:none}"; document.body.append(styl); var i = document.createElement("div"); ++npso; i.className = "alertbox"; // Replace every "\n" with "<br>" in the description and title description = description.replace(/\n/g, "<br>"); title = title.replace(/\n/g, "<br>"); // Replace every "/color^" with "<label class='alertbox' style='color: *color*'>" and every "/color-end" with "</label>" description = description.replace( /\/color\^(.*?)\^/g , "<label class='alertbox' style='color: $1'>" ); description = description.replace(/\/color-end/g, "</label>"); title = title.replace( /\/color\^(.*?)\^/g , "<label class='alertbox' style='color: $1'>" ); title = title.replace(/\/color-end/g, "</label>"); // Make * a bullington point // description = description.replace(/(?<!\\)(?<!\/ignore)\/ignore\*($|[^/]|\/$)|(?<!\/ignore)(?<!\\)\*(?!\/ignore)/g, '<li>'); description = description.replace( /\/point(.*?)\/point-end/g , "<li>$1</li>" ); // Replace every "/bgcolor^" with "<label class='alertbox' style='background-color: *color*'>" and every "/bgcolor-end" with "</label>" description = description.replace( /\/bgcolor\^(.*?)\^/g , "<label class='alertbox' style='background-color: $1'>" ); description = description.replace(/\/bgcolor-end/g, "</label>"); title = title.replace( /\/bgcolor\^(.*?)\^/g , "<label class='alertbox' style='background-color: $1'>" ); title = title.replace(/\/bgcolor-end/g, "</label>"); // Replace every "italic>" with "<i class='alertbox'>" and every "<italic" with "</i>" description = description.replace(/italic>/g, "<i class = 'alertbox'>"); description = description.replace(/<italic/g, "</i>"); title = title.replace(/italic>/g, "<i class = 'alertbox'>"); title = title.replace(/<italic/g, "</i>"); // Replace every "url-" with "<a target="blank" class='alertbox' href='https://" and every ">" after that with "'>" description = description.replace(/url-(.*?)>/g, "<a target='blank' class='alertbox aalertbox' href='https://$1'>"); title = title.replace(/url-(.*?)>/g, "<a target='blank' class='alertbox aalertbox' href='https://$1'>"); // Replace every "<url" with "</a>" description = description.replace(/<url/g, "</a>"); title = title.replace(/<url/g, "</a>"); description = "<div>" + description + "</div>"; i.innerHTML = `<div class="alertbox" style=" border-radius: 16px; top: 50%; left: 50%; transform: translate(-50%, -50%) scale(0.8); position: fixed; font-weight: bolder; z-index: 10000000; transform-origin: center center; width: 782px; color: white; background: #2c4470; border: solid 0.1px blue; "><br><center><h3 class="alertbox" style=" font-size: 33px; margin:0; ">${title}</h3></center><center><hr class="alertbox" style=" width: 180px; border-color: #ffffff; "></center><br> <center><div class="alertbox alertboxbox" style=" font-size: 20px; "><p class = "alertbox" style = "width: 509px;font-size: 19px">${description}</p><button class="alertbox" style=" background: #3737a9; border: none; margin-top: 20px; padding: 13px; color: white; font-size: 18px; border-radius: 11px; padding-right: 36px; padding-left: 36px; font-weight:bolder; cursor: pointer; " id="remover${npso}">OK</button></div><br></center></div>`; document.body.append(i); i.style.left = innerWidth - (250 * 6 - 50) + "px"; document .getElementById("remover" + npso) .addEventListener("click", function () { styl.remove(); i.remove(); alertonclick(); }); } , hacked: { saveGameOver: function() { this.playSound(this.soundFx.HIT); vibrate(200); this.stop(); this.crashed = true; tusdino.modules.isDead = true; this.distanceMeter.acheivement = false; var cscr = document.getElementById("currentScore"); cscr.innerText = currentScore; var sb = document.getElementById("shareBlock"); sb.style.display = "none"; // block this.tRex.update(100, Trex.status.CRASHED); if (!this.gameOverPanel) { this.gameOverPanel = new GameOverPanel( this.canvas , this.spriteDef.TEXT_SPRITE , this.spriteDef.RESTART , this.dimensions ); } else { this.gameOverPanel.draw(); } if (this.distanceRan > this.highestScore) { this.highestScore = Math.ceil(this.distanceRan); this.distanceMeter.setHighScore(this.highestScore); currentScore = Math.round(this.highestScore * 0.025); try { cscr.innerText = currentScore; } catch (e) {} var score_d = 0; if (document.getElementById("score-5") !== null) { score_d = document.getElementById("score-5").innerHTML; } try { if (currentScore > score_d) { var xhr = new XMLHttpRequest(); xhr.open( "GET" , "/inc/check.php?score=" + currentScore , false ); xhr.send(); if (xhr.status != 200) {} else { if (xhr.responseText != "") { if (user_name == "") { user_name = prompt(xhr.responseText, "Anonym"); if (user_name == "null" || user_name == "") { user_name = "Anonym"; } } else { alert(xhr.responseText); } xhr.open( "GET" , "/inc/set.php?name=" + user_name + "&score=" + currentScore , false ); xhr.send(); //location.reload() } } } } catch (e) {} } this.time = getTimeStamp(); }, Trex: function (canvas, spritePos) { this.canvas = canvas; this.canvasCtx = canvas.getContext("2d"); this.spritePos = this.spritePos || spritePos; this.xPos = this.xPos || 0; this.yPos = this.yPos || 0; this.groundYPos = this.groundYPos || 0; this.currentFrame = this.currentFrame || 0; this.currentAnimFrames = this.currentAnimFrames || []; this.blinkDelay = this.blinkDelay || 0; this.animStartTime = this.animStartTime || 0; this.timer = 0; this.msPerFrame = 1000 / FPS; this.config = tusdino.hacked.Trex.config; this.status = tusdino.hacked.Trex.status.WAITING; this.jumping = false; this.ducking = false; this.jumpVelocity = 0; this.reachedMinHeight = false; this.speedDrop = false; this.jumpCount = 0; this.jumpspotX = 0; this.init(); } , gameOver: function () { if (!tusdino.cheats.noclip) { tusdino.modules.isDead = true; if (tusdino.cheats.instantContinue && tusdino.modules.isDead) { Runner.instance_.horizon.obstacles=[]; Runner.instance_.setSpeed(Runner.instance_.config.SPEED); Runner.instance_.activated = true; Runner.instance_.crashed = false; Runner.instance_.tRex.reset(); Ruuner.instance_.tRex.startJump(0.5); tusdino.modules.isDead = false; } this.playSound(this.soundFx.HIT); vibrate(200); this.stop(); this.crashed = true; this.distanceMeter.acheivement = false; var cscr = document.getElementById("currentScore"); cscr.innerText = currentScore; var sb = document.getElementById("shareBlock"); sb.style.display = "none"; // block this.tRex.update(100, Trex.status.CRASHED); if (!this.gameOverPanel) { this.gameOverPanel = new GameOverPanel( this.canvas , this.spriteDef.TEXT_SPRITE , this.spriteDef.RESTART , this.dimensions ); } else { this.gameOverPanel.draw(); } if (this.distanceRan > this.highestScore) { this.highestScore = Math.ceil(this.distanceRan); this.distanceMeter.setHighScore(this.highestScore); currentScore = Math.round(this.highestScore * 0.025); try { cscr.innerText = currentScore; } catch (e) {} var score_d = 0; if (document.getElementById("score-5") !== null) { score_d = document.getElementById("score-5").innerHTML; } try { if (currentScore > score_d) { var xhr = new XMLHttpRequest(); xhr.open( "GET" , "/inc/check.php?score=" + currentScore , false ); xhr.send(); if (xhr.status != 200) {} else { if (xhr.responseText != "") { if (user_name == "") { user_name = prompt(xhr.responseText, "Anonym"); if (user_name == "null" || user_name == "") { user_name = "Anonym"; } } else { alert(xhr.responseText); } xhr.open( "GET" , "/inc/set.php?name=" + user_name + "&score=" + currentScore , false ); xhr.send(); //location.reload() } } } } catch (e) {} } this.time = getTimeStamp(); if (tusdino.cheats.instantrespawn) { this.restart(); } } }, Obstacle: function ( canvasCtx , type , spriteImgPos , dimensions , gapCoefficient , speed ) { this.canvasCtx = canvasCtx; this.spritePos = spriteImgPos; this.typeConfig = type; this.gapCoefficient = gapCoefficient; this.size = getRandomNum(1, Obstacle.MAX_OBSTACLE_LENGTH); this.dimensions = dimensions; this.remove = false; this.xPos = 0; this.yPos = 0; this.width = 0; this.collisionBoxes = []; this.gap = 0; this.speedOffset = 0; this.currentFrame = 0; this.timer = 0; this.init(speed); } , DistanceMeter: function DistanceMeter( canvas , spritePos , canvasWidth ) { this.canvas = canvas; this.canvasCtx = canvas.getContext("2d"); this.image = Runner.imageSprite; this.spritePos = spritePos; this.x = 0; this.y = 5; this.currentDistance = 0; this.maxScore = 0; this.highScore = 0; this.container = null; this.digits = []; this.acheivement = false; this.defaultString = ""; this.flashTimer = 0; this.flashIterations = 0; this.config = DistanceMeter.config; this.maxScoreUnits = this.config.MAX_DISTANCE_UNITS; this.init(canvasWidth); } , Horizon: function Horizon( canvas , spritePos , dimensions , gapCoefficient ) { this.canvas = canvas; this.canvasCtx = this.canvas.getContext("2d"); this.config = Horizon.config; this.dimensions = dimensions; this.gapCoefficient = gapCoefficient; this.obstacles = []; this.obstacleHistory = []; this.horizonOffsets = [0, 0]; this.cloudFrequency = this.config.CLOUD_FREQUENCY; this.spritePos = spritePos; this.clouds = []; this.cloudSpeed = this.config.BG_CLOUD_SPEED; this.horizonLine = null; this.init(); } , } , onclick: function (id, func) { console.log("Applying click to: " + id); document.getElementById(id).addEventListener("click", function (e) { func(e); }); document.getElementById(id).addEventListener("focus", function () { this.blur(); }); } , saved: { clearCanvas: Runner.instance_.clearCanvas , gameOver: Runner.instance_.gameOver , update: Runner.instance_.update , startGame: Runner.instance_.startGame , trexDraw: Runner.instance_.tRex.draw , playSound: Runner.instance_.playSound , addNewObstacle: Runner.instance_.horizon.addNewObstacle , CACTUS_LARGE: (Runner.instance_.horizon.spritePos && Runner.instance_.horizon.spritePos.CACTUS_LARGE || null) , CACTUS_SMALL: (Runner.instance_.horizon.spritePos && Runner.instance_.horizon.spritePos.CACTUS_SMALL || null) , PTERODACTYL: (Runner.instance_.horizon.spritePos && Runner.instance_.horizon.spritePos.PTERODACTYL || null) , TREX: (Runner.instance_.horizon.spritePos && Runner.instance_.horizon.spritePos.TREX || null) , } , modules: { onGround: false , isPlaying: false , isDead: false , } , msg: function (text) { Toastify({ text: text , duration: 2000 , close: true , gravity: "bottom", // `top` or `bottom` position: "left", // `left`, `center` or `right` stopOnFocus: true, // Prevents dismissing of toast on hover style: { background: "#343434" , } , onClick: function () {}, // Callback after click }).showToast(); } , setclick: function (id, func) { document.getElementById(id, function (e) { func(e); }); } , config: { hotkeys: { togglemenu: "j" , } , } , logs: { sent: [] , default: function (text) { console.log( "%c[" + "%cTusDino" + "%c] " + "%c" + text , "color: #2b6eba" , "color: #2ba5ba" , "color: #2b6eba" , "color: white" ); this.sent.push({ type: "default" , text: text , }); } , success: function (text) { console.log( "%c[" + "%cTusDinoSuccess" + "%c] " + "%c" + text , "color: #58ba2b" , "color: #2bba62" , "color: #58ba2b" , "color: white" ); this.sent.push({ type: "success" , text: text , }); } , error: function (text) { console.log( "%c[" + "%cTusDinoError" + "%c] " + "%c" + text , "color: #ba2b2b" , "color: #ba402b" , "color: #ba2b2b" , "color: white" ); this.sent.push({ type: "error" , text: text , }); } , } , info: { getItem: GM_getValue, setItem: GM_setValue, version: info_.script.version , description: info_.script.description , } , }; fetch('https://raw.githubusercontent.com/Fault-Utilities/TusDino-Chrome-Dino-Mod-Menu/main/version').then((text)=>{return text.text()}).then((txt)=>{ if (txt.replaceAll('\n','') != tusdino.info.version) { var i = confirm("[NEW UPDATE] There's a new TusDino version ("+txt.replaceAll('\n', '')+"), would you like to update now?\n\nYou can check what's new here: https://github.com/Fault-Utilities/TusDino-Chrome-Dino-Mod-Menu/blob/main/whatsnew.md"); if (i) { alert("Please delete your current script"); if (isGreasyfork) open("https://gf.qytechs.cn/en/scripts/457594-%EF%BD%94%EF%BD%95%EF%BD%93%EF%BD%84%EF%BD%89%EF%BD%8E%EF%BD%8F-best-chrome-dino-game-t-rex-mod-menu-cheat-0-17-0"); if (isGithub) open("https://github.com/Fault-Utilities/TusDino-Chrome-Dino-Mod-Menu/raw/main/tusdino.user.js"); } else { alert("Okay, we'll ask you next time you!"); } tusdino.logs.error("Mismatched versions, need to update"); } else { tusdino.logs.success("Matched version"); } }); var d = document.createElement("link"); d.href = "https://cdn.jsdelivr.net/npm/toastify-js/src/toastify.min.css"; function getRandomNum(min, max) { return Math.floor(Math.random() * (max - min + 1)) + min; } const ver = tusdino.info.version; const splitString = ver.split("."); // got from https://github.com/omichelsen/compare-versions/blob/main/src/index.ts const compareVersions = (v1, v2) => { const n1 = validateAndParse(v1) const n2 = validateAndParse(v2) const p1 = n1.pop() const p2 = n2.pop() const r = compareSegments(n1, n2) if (r !== 0) return r if (p1 && p2) { return compareSegments(p1.split("."), p2.split(".")) } else if (p1 || p2) { return p1 ? -1 : 1 } return 0 } const validate = version => typeof version === "string" && /^[v\d]/.test(version) && semver.test(version) const compare = (v1, v2, operator) => { assertValidOperator(operator) const res = compareVersions(v1, v2) return operatorResMap[operator].includes(res) } const satisfies = (version, range) => { if (range.includes("||")) { return range.split("||").some(r => satisfies(version, r)) } else if (range.includes(" ")) { return range .trim() .replace(/\s{2,}/g, " ") .split(" ") .every(r => satisfies(version, r)) } const m = range.match(/^([<>=~^]+)/) const op = m ? m[1] : "=" if (op !== "^" && op !== "~") return compare(version, range, op) const [v1, v2, v3, , vp] = validateAndParse(version) const [r1, r2, r3, , rp] = validateAndParse(range) const v = [v1, v2, v3] const r = [r1, r2 ?? "x", r3 ?? "x"] if (rp) { if (!vp) return false if (compareSegments(v, r) !== 0) return false if (compareSegments(vp.split("."), rp.split(".")) === -1) return false } const nonZero = r.findIndex(v => v !== "0") + 1 const i = op === "~" ? 2 : nonZero > 1 ? nonZero : 1 if (compareSegments(v.slice(0, i), r.slice(0, i)) !== 0) return false if (compareSegments(v.slice(i), r.slice(i)) === -1) return false return true } const semver = /^[v^~<>=]*?(\d+)(?:\.([x*]|\d+)(?:\.([x*]|\d+)(?:\.([x*]|\d+))?(?:-([\da-z\-]+(?:\.[\da-z\-]+)*))?(?:\+[\da-z\-]+(?:\.[\da-z\-]+)*)?)?)?$/i const validateAndParse = version => { if (typeof version !== "string") { throw new TypeError("Invalid argument expected string") } const match = version.match(semver) if (!match) { throw new Error(`Invalid argument not valid semver ('${version}' received)`) } match.shift() return match } const isWildcard = s => s === "*" || s === "x" || s === "X" const tryParse = v => { const n = parseInt(v, 10) return isNaN(n) ? v : n } const forceType = (a, b) => typeof a !== typeof b ? [String(a), String(b)] : [a, b] const compareStrings = (a, b) => { if (isWildcard(a) || isWildcard(b)) return 0 const [ap, bp] = forceType(tryParse(a), tryParse(b)) if (ap > bp) return 1 if (ap < bp) return -1 return 0 } const compareSegments = (a, b) => { for (let i = 0; i < Math.max(a.length, b.length); i++) { const r = compareStrings(a[i] || "0", b[i] || "0") if (r !== 0) return r } return 0 } const operatorResMap = { ">": [1], ">=": [0, 1], "=": [0], "<=": [-1, 0], "<": [-1], "!=": [-1, 1] } const allowedOperators = Object.keys(operatorResMap) const assertValidOperator = op => { if (typeof op !== "string") { throw new TypeError( `Invalid operator type, expected string but got ${typeof op}` ) } if (allowedOperators.indexOf(op) === -1) { throw new Error( `Invalid operator, expected one of ${allowedOperators.join("|")}` ) } } window.compareVersions = compareVersions; tusdino.info.setItem("newversion",splitString.join('.')) if (!tusdino.info.getItem("oldversion")) tusdino.info.setItem("oldversion", '0.00.0') if (compareVersions(tusdino.info.getItem("newversion"), tusdino.info.getItem("oldversion")) > 0) { tusdino.whatsnew(); var newver = tusdino.info.getItem("newversion"); tusdino.info.setItem("oldversion", newver) } else if (compareVersions(tusdino.info.getItem("newversion"), tusdino.info.getItem("oldversion")) < 0) { tusdino.whatsnew(true); var newver = tusdino.info.getItem("newversion"); tusdino.info.setItem("oldversion", newver) } function vibrate(duration) { if (IS_MOBILE && window.navigator.vibrate) { window.navigator.vibrate(duration); } } function createCanvas(container, width, height, opt_classname) { var canvas = document.createElement("canvas"); canvas.className = opt_classname ? Runner.classes.CANVAS + " " + opt_classname : Runner.classes.CANVAS; canvas.width = width; canvas.height = height; container.appendChild(canvas); return canvas; } function decodeBase64ToArrayBuffer(base64String) { var len = (base64String.length / 4) * 3; var str = atob(base64String); var arrayBuffer = new ArrayBuffer(len); var bytes = new Uint8Array(arrayBuffer); for (var i = 0; i < len; i++) { bytes[i] = str.charCodeAt(i); } return bytes.buffer; } function getTimeStamp() { //return IS_IOS ? new Date().getTime() : performance.now() return new Date().getTime(); // Safari 5.17 Fix 12.06.17 } function GameOverPanel(canvas, textImgPos, restartImgPos, dimensions) { this.canvas = canvas; this.canvasCtx = canvas.getContext("2d"); this.canvasDimensions = dimensions; this.textImgPos = textImgPos; this.restartImgPos = restartImgPos; this.draw(); } GameOverPanel.dimensions = { TEXT_X: 0 , TEXT_Y: 13 , TEXT_WIDTH: 191 , TEXT_HEIGHT: 11 , RESTART_WIDTH: 36 , RESTART_HEIGHT: 32 , }; GameOverPanel.prototype = { updateDimensions: function (width, opt_height) { this.canvasDimensions.WIDTH = width; if (opt_height) { this.canvasDimensions.HEIGHT = opt_height; } } , draw: function () { var dimensions = GameOverPanel.dimensions; var centerX = this.canvasDimensions.WIDTH / 2; var textSourceX = dimensions.TEXT_X; var textSourceY = dimensions.TEXT_Y; var textSourceWidth = dimensions.TEXT_WIDTH; var textSourceHeight = dimensions.TEXT_HEIGHT; var textTargetX = Math.round(centerX - dimensions.TEXT_WIDTH / 2); var textTargetY = Math.round((this.canvasDimensions.HEIGHT - 25) / 3); var textTargetWidth = dimensions.TEXT_WIDTH; var textTargetHeight = dimensions.TEXT_HEIGHT; var restartSourceWidth = dimensions.RESTART_WIDTH; var restartSourceHeight = dimensions.RESTART_HEIGHT; var restartTargetX = centerX - dimensions.RESTART_WIDTH / 2; var restartTargetY = this.canvasDimensions.HEIGHT / 2; if (IS_HIDPI) { textSourceY *= 2; textSourceX *= 2; textSourceWidth *= 2; textSourceHeight *= 2; restartSourceWidth *= 2; restartSourceHeight *= 2; } textSourceX += this.textImgPos.x; textSourceY += this.textImgPos.y; this.canvasCtx.drawImage( Runner.imageSprite , textSourceX , textSourceY , textSourceWidth , textSourceHeight , textTargetX , textTargetY , textTargetWidth , textTargetHeight ); this.canvasCtx.drawImage( Runner.imageSprite , this.restartImgPos.x , this.restartImgPos.y , restartSourceWidth , restartSourceHeight , restartTargetX // restartTargetX-30 , restartTargetY , dimensions.RESTART_WIDTH , dimensions.RESTART_HEIGHT ); i.width = 50; //this.canvasCtx.drawImage( // imageContinue // , restartTargetX+30 // , restartTargetY // , restartSourceWidth // , restartSourceHeight //); } , }; d.rel = "stylesheet"; document.body.append(d); var Update = 2; var startBhop = true; var jum = true; var duc = true; var xSpeed = 1; var ySpeed = 1; var goflydown = false; var goflyup = false; var goright = false; var goleft = false; var tt = true; var y = Runner.instance_.tRex.yPos; var x = Runner.instance_.tRex.xPos; setInterval(function () { tusdino.modules.onGround = Runner.instance_.tRex.yPos == Runner.instance_.tRex.groundYPos; tusdino.modules.isPlaying = Runner.instance_.activated; if (tusdino.cheats.bhop && startBhop) { if (tusdino.modules.onGround && tusdino.modules.isPlaying) { startBhop = false; Runner.instance_.tRex.startJump(Runner.instance_.currentSpeed); Runner.instance_.playSound(Runner.instance_.soundFx.BUTTON_PRESS); } } if (!startBhop) { if (!tusdino.modules.onGround) { startBhop = true; } } if (tusdino.cheats.stormcloud) { Runner.instance_.horizon.addCloud(); } if (tusdino.cheats.autoContinueDeath && tusdino.modules.isDead) { Runner.instance_.horizon.obstacles=[]; Runner.instance_.setSpeed(Runner.instance_.config.SPEED); Runner.instance_.activated = true; Runner.instance_.crashed = false; Runner.instance_.tRex.reset(); Runner.instance_.tRex.startJump(0.5); tusdino.modules.isDead = false; } if (tusdino.cheats.invisibility) { Runner.instance_.tRex.spritePos = {}; } if (tusdino.cheats.noobstacles) { Runner.instance_.horizon.spritePos.CACTUS_LARGE = {}; Runner.instance_.horizon.spritePos.CACTUS_SMALL = {}; Runner.instance_.horizon.spritePos.PTERODACTYL = {}; Runner.instance_.horizon.obstacles = []; } if (tusdino.cheats.walk) { if (goright) { x += xSpeed; } if (goleft) { x -= xSpeed; } Runner.instance_.tRex.xPos = x; } if (tusdino.cheats.fly) { if (tt) { if (Runner.instance_.tRex.yPos < 30) { if (Runner.instance_.tRex.yPos != 30) { y += 1; } else { tt = false; } } else { if (Runner.instance_.tRex.yPos != 30) { y -= 1; } else { tt = false; } } } else { tusdino.cheats.allowFlyMode = true; } if (goflyup) { y += ySpeed; } if (goflydown) { y -= ySpeed; } Runner.instance_.tRex.yPos = y; } if (tusdino.cheats.autoplayer) { var tRex = Runner.instance_.tRex; var obstacles = Runner.instance_.horizon.obstacles; if ( Runner.instance_.horizon.obstacles[0] && Runner.instance_.horizon.obstacles[0].typeConfig.type == "PTERODACTYL" && Runner.instance_.horizon.obstacles[0].yPos < 75 ) { if ( !tRex.jumping && obstacles.length > 0 && obstacles[0].xPos + obstacles[0].width <= (parseInt(Runner.instance_.currentSpeed - 0.1) - 5) * 34 + 160 && obstacles[0].xPos + obstacles[0].width > 20 ) { if (duc) Runner.instance_.tRex.setDuck(true); duc = false; setTimeout(() => { Runner.instance_.tRex.setDuck(false); duc = true; }, 1500); } } else { if ( obstacles[0] && !tRex.jumping && obstacles.length > 0 && obstacles[0].xPos + obstacles[0].width <= (parseInt(Runner.instance_.currentSpeed - 0.1) - 5) * 34 + 160 && obstacles[0].xPos + obstacles[0].width > 20 ) { if (jum) { if (duc) duc = false; Runner.instance_.tRex.setDuck(false); duc = true; Runner.instance_.playSound( Runner.instance_.soundFx.BUTTON_PRESS ); tRex.startJump(Runner.instance_.currentSpeed); } } } } }, Update); Runner.instance_.horizon.addNewObstacle = function (currentSpeed) { tusdino.saved.addNewObstacle.bind(this)(currentSpeed); }; Runner.instance_.playSound = function (soundBuffer) { if (!tusdino.cheats.mute) { tusdino.saved.playSound.bind(this)(soundBuffer); } }; function checkForCollision(obstacle, tRex, opt_canvasCtx) { var obstacleBoxXPos = Runner.defaultDimensions.WIDTH + obstacle.xPos; var tRexBox = new CollisionBox( tRex.xPos + 1 , tRex.yPos + 1 , tRex.config.WIDTH - 2 , tRex.config.HEIGHT - 2 ); var obstacleBox = new CollisionBox( obstacle.xPos + 1 , obstacle.yPos + 1 , obstacle.typeConfig.width * obstacle.size - 2 , obstacle.typeConfig.height - 2 ); if (opt_canvasCtx) { drawCollisionBoxes(opt_canvasCtx, tRexBox, obstacleBox); } if (boxCompare(tRexBox, obstacleBox)) { var collisionBoxes = obstacle.collisionBoxes; var tRexCollisionBoxes = tRex.ducking ? Trex.collisionBoxes.DUCKING : Trex.collisionBoxes.RUNNING; for (var t = 0; t < tRexCollisionBoxes.length; t++) { for (var i = 0; i < collisionBoxes.length; i++) { var adjTrexBox = createAdjustedCollisionBox( tRexCollisionBoxes[t] , tRexBox ); var adjObstacleBox = createAdjustedCollisionBox( collisionBoxes[i] , obstacleBox ); var crashed = boxCompare(adjTrexBox, adjObstacleBox); if (opt_canvasCtx) { drawCollisionBoxes(opt_canvasCtx, adjTrexBox, adjObstacleBox); } if (crashed) { return [adjTrexBox, adjObstacleBox]; } } } } return false; }; function createAdjustedCollisionBox(box, adjustment) { return new CollisionBox( box.x + adjustment.x , box.y + adjustment.y , box.width , box.height ); } function drawCollisionBoxes(canvasCtx, tRexBox, obstacleBox) { canvasCtx.save(); canvasCtx.strokeStyle = "#f00"; canvasCtx.strokeRect( tRexBox.x , tRexBox.y , tRexBox.width , tRexBox.height ); canvasCtx.strokeStyle = "#0f0"; canvasCtx.strokeRect( obstacleBox.x , obstacleBox.y , obstacleBox.width , obstacleBox.height ); canvasCtx.restore(); } function boxCompare(tRexBox, obstacleBox) { var crashed = false; var tRexBoxX = tRexBox.x; var tRexBoxY = tRexBox.y; var obstacleBoxX = obstacleBox.x; var obstacleBoxY = obstacleBox.y; if ( tRexBox.x < obstacleBoxX + obstacleBox.width && tRexBox.x + tRexBox.width > obstacleBoxX && tRexBox.y < obstacleBox.y + obstacleBox.height && tRexBox.height + tRexBox.y > obstacleBox.y ) { crashed = true; } return crashed; } function CollisionBox(x, y, w, h) { this.x = x; this.y = y; this.width = w; this.height = h; } Runner.instance_.gameOver = tusdino.hacked.gameOver; tusdino.hacked.Trex.config = { DROP_VELOCITY: -5 , GRAVITY: 0.6 , HEIGHT: 47 , HEIGHT_DUCK: 25 , INIITAL_JUMP_VELOCITY: -10 , INTRO_DURATION: 1500 , MAX_JUMP_HEIGHT: 30 , MIN_JUMP_HEIGHT: 30 , SPEED_DROP_COEFFICIENT: 3 , SPRITE_WIDTH: 262 , START_X_POS: 50 , WIDTH: 44 , WIDTH_DUCK: 59 , }; tusdino.hacked.Trex.collisionBoxes = { DUCKING: [new CollisionBox(1, 18, 55, 25)] , RUNNING: [ new CollisionBox(22, 0, 17, 16) , new CollisionBox(1, 18, 30, 9) , new CollisionBox(10, 35, 14, 8) , new CollisionBox(1, 24, 29, 5) , new CollisionBox(5, 30, 21, 4) , new CollisionBox(9, 34, 15, 4) , ] , }; tusdino.hacked.Trex.status = { CRASHED: "CRASHED" , DUCKING: "DUCKING" , JUMPING: "JUMPING" , RUNNING: "RUNNING" , WAITING: "WAITING" , }; if (!tusdino.info.getItem("joinedDiscordtusdino") && showDiscord) { var f = confirm( "Do you wan't to join the Discord server? (You can request, report bugs or inform the owner about something)" ); if (f) { tusdino.info.setItem("joinedDiscordtusdino", true); open("https://discord.gg/6eaDrx5J9s"); alert("Thank you for joining the Discord server!"); } else { alert( "Alright, we'll ask you next time. You can disable this in the top of the userscript, replace yes with no: // @show-discord no" ); } } tusdino.hacked.Trex.BLINK_TIMING = 7000; tusdino.hacked.Trex.animFrames = { WAITING: { frames: [44, 0] , msPerFrame: 1000 / 3 , } , RUNNING: { frames: [88, 132] , msPerFrame: 1000 / 12 , } , CRASHED: { frames: [220] , msPerFrame: 1000 / 60 , } , JUMPING: { frames: [0] , msPerFrame: 1000 / 60 , } , DUCKING: { frames: [262, 321] , msPerFrame: 1000 / 8 , } , }; tusdino.hacked.Trex.prototype = { init: function () { this.blinkDelay = this.setBlinkDelay(); this.groundYPos = Runner.defaultDimensions.HEIGHT - this.config.HEIGHT - Runner.config.BOTTOM_PAD; this.yPos = this.groundYPos; this.minJumpHeight = this.groundYPos - this.config.MIN_JUMP_HEIGHT; this.draw(0, 0); this.update(0, Trex.status.WAITING); } , setJumpVelocity: function (setting) { this.config.INIITAL_JUMP_VELOCITY = -setting; this.config.DROP_VELOCITY = -setting / 2; } , update: function (deltaTime, opt_status) { this.timer += deltaTime; if (opt_status) { this.status = opt_status; this.currentFrame = 0; this.msPerFrame = Trex.animFrames[opt_status].msPerFrame; this.currentAnimFrames = Trex.animFrames[opt_status].frames; if (opt_status == Trex.status.WAITING) { this.animStartTime = getTimeStamp(); this.setBlinkDelay(); } } if (this.playingIntro && this.xPos < this.config.START_X_POS) { this.xPos += Math.round( (this.config.START_X_POS / this.config.INTRO_DURATION) * deltaTime ); } if (this.status == Trex.status.WAITING) { this.blink(getTimeStamp()); } else { this.draw(this.currentAnimFrames[this.currentFrame], 0); } if (this.timer >= this.msPerFrame) { this.currentFrame = this.currentFrame == this.currentAnimFrames.length - 1 ? 0 : this.currentFrame + 1; this.timer = 0; } if (this.speedDrop && this.yPos == this.groundYPos) { this.speedDrop = false; this.setDuck(true); } } , draw: function (x, y) { var sourceX = x; var sourceY = y; var sourceWidth = this.ducking && this.status != Trex.status.CRASHED ? this.config.WIDTH_DUCK : this.config.WIDTH; var sourceHeight = this.config.HEIGHT; if (IS_HIDPI) { sourceX *= 2; sourceY *= 2; sourceWidth *= 2; sourceHeight *= 2; } sourceX += this.spritePos.x; sourceY += this.spritePos.y; if (this.ducking && this.status != Trex.status.CRASHED) { this.canvasCtx.drawImage( Runner.imageSprite , sourceX , sourceY , sourceWidth , sourceHeight , this.xPos , this.yPos , this.config.WIDTH_DUCK , this.config.HEIGHT ); } else { if (this.ducking && this.status == Trex.status.CRASHED) { this.xPos++; } this.canvasCtx.drawImage( Runner.imageSprite , sourceX , sourceY , sourceWidth , sourceHeight , this.xPos , this.yPos , this.config.WIDTH , this.config.HEIGHT ); } } , setBlinkDelay: function () { this.blinkDelay = Math.ceil(Math.random() * Trex.BLINK_TIMING); } , blink: function (time) { var deltaTime = time - this.animStartTime; if (deltaTime >= this.blinkDelay) { this.draw(this.currentAnimFrames[this.currentFrame], 0); if (this.currentFrame == 1) { this.setBlinkDelay(); this.animStartTime = time; } } } , startJump: function (speed) { if (!this.jumping) { this.update(0, Trex.status.JUMPING); this.jumpVelocity = this.config.INIITAL_JUMP_VELOCITY - speed / 10; this.jumping = true; this.reachedMinHeight = false; this.speedDrop = false; } } , endJump: function () { if ( this.reachedMinHeight && this.jumpVelocity < this.config.DROP_VELOCITY ) { this.jumpVelocity = this.config.DROP_VELOCITY; } } , updateJump: function (deltaTime, speed) { var msPerFrame = Trex.animFrames[this.status].msPerFrame; var framesElapsed = deltaTime / msPerFrame; if (this.speedDrop) { this.yPos += Math.round( this.jumpVelocity * this.config.SPEED_DROP_COEFFICIENT * framesElapsed ); window.drawYPos += Math.round( this.jumpVelocity * this.config.SPEED_DROP_COEFFICIENT * framesElapsed ); } else { this.yPos += Math.round(this.jumpVelocity * framesElapsed); window.drawYPos += Math.round(this.jumpVelocity * framesElapsed); } this.jumpVelocity += this.config.GRAVITY * framesElapsed; if (this.yPos < this.minJumpHeight || this.speedDrop) { this.reachedMinHeight = true; } if (this.yPos < this.config.MAX_JUMP_HEIGHT || this.speedDrop) { this.endJump(); } if (this.yPos > this.groundYPos) { this.reset(); this.jumpCount++; } this.update(deltaTime); } , setSpeedDrop: function () { this.speedDrop = true; this.jumpVelocity = 1; } , setDuck: function (isDucking) { if (isDucking && this.status != Trex.status.DUCKING) { this.update(0, Trex.status.DUCKING); this.ducking = true; } else if (this.status == Trex.status.DUCKING) { this.update(0, Trex.status.RUNNING); this.ducking = false; } } , reset: function () { this.yPos = this.groundYPos; this.jumpVelocity = 0; this.jumping = false; this.ducking = false; this.update(0, Trex.status.RUNNING); this.midair = false; this.speedDrop = false; this.jumpCount = 0; } , }; function getTimeStamp() { //return IS_IOS ? new Date().getTime() : performance.now() return new Date().getTime(); // Safari 5.17 Fix 12.06.17 } function hackedInit() { this.horizon = new tusdino.hacked.Horizon( this.canvas , this.spriteDef , this.dimensions , this.config.GAP_COEFFICIENT ); this.distanceMeter = new tusdino.hacked.DistanceMeter( this.canvas , this.spriteDef.TEXT_SPRITE , this.dimensions.WIDTH ); this.tRex = new tusdino.hacked.Trex(this.canvas, this.spriteDef.TREX); } tusdino.hacked.Obstacle.MAX_GAP_COEFFICIENT = 1.5; tusdino.hacked.Obstacle.MAX_OBSTACLE_LENGTH = 3; tusdino.hacked.Obstacle.prototype = { init: function (speed) { this.cloneCollisionBoxes(); if (this.size > 1 && this.typeConfig.multipleSpeed > speed) { this.size = 1; } this.width = this.typeConfig.width * this.size; this.xPos = this.dimensions.WIDTH - this.width; if (Array.isArray(this.typeConfig.yPos)) { var yPosConfig = IS_MOBILE ? this.typeConfig.yPosMobile : this.typeConfig.yPos; this.yPos = yPosConfig[getRandomNum(0, yPosConfig.length - 1)]; } else { this.yPos = this.typeConfig.yPos; } this.draw(); if (this.size > 1) { this.collisionBoxes[1].width = this.width - this.collisionBoxes[0].width - this.collisionBoxes[2].width; this.collisionBoxes[2].x = this.width - this.collisionBoxes[2].width; } if (this.typeConfig.speedOffset) { this.speedOffset = Math.random() > 0.5 ? this.typeConfig.speedOffset : -this.typeConfig.speedOffset; } this.gap = this.getGap(this.gapCoefficient, speed); } , draw: function () { var sourceWidth = this.typeConfig.width; var sourceHeight = this.typeConfig.height; if (IS_HIDPI) { sourceWidth = sourceWidth * 2; sourceHeight = sourceHeight * 2; } var sourceX = sourceWidth * this.size * (0.5 * (this.size - 1)) + this.spritePos.x; if (this.currentFrame > 0) { sourceX += sourceWidth * this.currentFrame; } this.canvasCtx.drawImage( Runner.imageSprite , sourceX , this.spritePos.y , sourceWidth * this.size , sourceHeight , this.xPos , this.yPos , this.typeConfig.width * this.size , this.typeConfig.height ); } , update: function (deltaTime, speed) { if (!this.remove) { if (this.typeConfig.speedOffset) { speed += this.speedOffset; } this.xPos -= Math.floor(((speed * FPS) / 1000) * deltaTime); if (this.typeConfig.numFrames) { this.timer += deltaTime; if (this.timer >= this.typeConfig.frameRate) { this.currentFrame = this.currentFrame == this.typeConfig.numFrames - 1 ? 0 : this.currentFrame + 1; this.timer = 0; } } this.draw(); if (!this.isVisible()) { this.remove = true; } } } , getGap: function (gapCoefficient, speed) { var minGap = Math.round( this.width * speed + this.typeConfig.minGap * gapCoefficient ); var maxGap = Math.round(minGap * Obstacle.MAX_GAP_COEFFICIENT); return getRandomNum(minGap, maxGap); } , isVisible: function () { return this.xPos + this.width > 0; } , cloneCollisionBoxes: function () { var collisionBoxes = this.typeConfig.collisionBoxes; for (var i = collisionBoxes.length - 1; i >= 0; i--) { this.collisionBoxes[i] = new CollisionBox( collisionBoxes[i].x , collisionBoxes[i].y , collisionBoxes[i].width , collisionBoxes[i].height ); } } , }; tusdino.hacked.Obstacle.types = [{ type: "CACTUS_SMALL" , width: 17 , height: 35 , yPos: 105 , multipleSpeed: 4 , minGap: 120 , minSpeed: 0 , collisionBoxes: [ new CollisionBox(0, 7, 5, 27) , new CollisionBox(4, 0, 6, 34) , new CollisionBox(10, 4, 7, 14) , ] , } , { type: "CACTUS_LARGE" , width: 25 , height: 50 , yPos: 90 , multipleSpeed: 7 , minGap: 120 , minSpeed: 0 , collisionBoxes: [ new CollisionBox(0, 12, 7, 38) , new CollisionBox(8, 0, 7, 49) , new CollisionBox(13, 10, 10, 38) , ] , } , { type: "PTERODACTYL" , width: 46 , height: 40 , yPos: [100, 75, 50] , yPosMobile: [100, 50] , multipleSpeed: 999 , minSpeed: 8.5 , minGap: 150 , collisionBoxes: [ new CollisionBox(15, 15, 16, 5) , new CollisionBox(18, 21, 24, 6) , new CollisionBox(2, 14, 4, 3) , new CollisionBox(6, 10, 4, 7) , new CollisionBox(10, 8, 6, 9) , ] , numFrames: 2 , frameRate: 1000 / 6 , speedOffset: 0.8 , } , ]; var DEFAULT_WIDTH = 600; Runner.instance_.horizon.addNewObstacle = function (currentSpeed) { var obstacleTypeIndex = getRandomNum(0, Obstacle.types.length - 1); var obstacleType = tusdino.hacked.Obstacle.types[obstacleTypeIndex]; if ( this.duplicateObstacleCheck(obstacleType.type) || currentSpeed < obstacleType.minSpeed ) { this.addNewObstacle(currentSpeed); } else { var obstacleSpritePos = this.spritePos[obstacleType.type]; this.obstacles.push( new Obstacle( this.canvasCtx , obstacleType , obstacleSpritePos , this.dimensions , this.gapCoefficient , currentSpeed ) ); this.obstacleHistory.unshift(obstacleType.type); if (this.obstacleHistory.length > 1) { this.obstacleHistory.splice(Runner.config.MAX_OBSTACLE_DUPLICATION); } } }; var FPS = 60; var IS_HIDPI = window.devicePixelRatio > 1; var IS_IOS = window.navigator.userAgent.indexOf("CriOS") > -1 || window.navigator.userAgent == "UIWebViewForStaticFileContent"; var IS_MOBILE = window.navigator.userAgent.indexOf("Mobi") > -1 || IS_IOS; var IS_TOUCH_ENABLED = "ontouchstart" in window; tusdino.hacked.Horizon.config = { BG_CLOUD_SPEED: 0.2 , BUMPY_THRESHOLD: 0.3 , CLOUD_FREQUENCY: 0.5 , HORIZON_HEIGHT: 16 , MAX_CLOUDS: 6 , }; tusdino.hacked.Horizon.prototype = { init: function () { this.addCloud(); this.horizonLine = new HorizonLine( this.canvas , this.spritePos.HORIZON ); } , update: function (deltaTime, currentSpeed, updateObstacles) { this.runningTime += deltaTime; this.horizonLine.update(deltaTime, currentSpeed); this.updateClouds(deltaTime, currentSpeed); if (updateObstacles) { this.updateObstacles(deltaTime, currentSpeed); } } , updateClouds: function (deltaTime, speed) { var cloudSpeed = (this.cloudSpeed / 1000) * deltaTime * speed; var numClouds = this.clouds.length; if (numClouds) { for (var i = numClouds - 1; i >= 0; i--) { this.clouds[i].update(cloudSpeed); } var lastCloud = this.clouds[numClouds - 1]; if ( numClouds < this.config.MAX_CLOUDS && this.dimensions.WIDTH - lastCloud.xPos > lastCloud.cloudGap && this.cloudFrequency > Math.random() ) { this.addCloud(); } this.clouds = this.clouds.filter(function (obj) { return !obj.remove; }); } } , updateObstacles: function (deltaTime, currentSpeed) { var updatedObstacles = this.obstacles.slice(0); for (var i = 0; i < this.obstacles.length; i++) { var obstacle = this.obstacles[i]; obstacle.update(deltaTime, currentSpeed); if (obstacle.remove) { updatedObstacles.shift(); } } this.obstacles = updatedObstacles; if (this.obstacles.length > 0) { var lastObstacle = this.obstacles[this.obstacles.length - 1]; if ( lastObstacle && !lastObstacle.followingObstacleCreated && lastObstacle.isVisible() && lastObstacle.xPos + lastObstacle.width + lastObstacle.gap < this.dimensions.WIDTH ) { this.addNewObstacle(currentSpeed); lastObstacle.followingObstacleCreated = true; } } else { this.addNewObstacle(currentSpeed); } } , addNewObstacle: function (currentSpeed) { var obstacleTypeIndex = getRandomNum(0, Obstacle.types.length - 1); var obstacleType = Obstacle.types[obstacleTypeIndex]; if ( this.duplicateObstacleCheck(obstacleType.type) || currentSpeed < obstacleType.minSpeed ) { this.addNewObstacle(currentSpeed); } else { var obstacleSpritePos = this.spritePos[obstacleType.type]; this.obstacles.push( new Obstacle( this.canvasCtx , obstacleType , obstacleSpritePos , this.dimensions , this.gapCoefficient , currentSpeed ) ); this.obstacleHistory.unshift(obstacleType.type); if (this.obstacleHistory.length > 1) { this.obstacleHistory.splice( Runner.config.MAX_OBSTACLE_DUPLICATION ); } } } , duplicateObstacleCheck: function (nextObstacleType) { var duplicateCount = 0; for (var i = 0; i < this.obstacleHistory.length; i++) { duplicateCount = this.obstacleHistory[i] == nextObstacleType ? duplicateCount + 1 : 0; } return duplicateCount >= Runner.config.MAX_OBSTACLE_DUPLICATION; } , reset: function () { this.obstacles = []; this.horizonLine.reset(); } , resize: function (width, height) { this.canvas.width = width; this.canvas.height = height; } , addCloud: function () { this.clouds.push( new Cloud(this.canvas, this.spritePos.CLOUD, this.dimensions.WIDTH) ); } , }; function Cloud(canvas, spritePos, containerWidth) { this.canvas = canvas; this.canvasCtx = this.canvas.getContext("2d"); this.spritePos = spritePos; this.containerWidth = containerWidth; this.xPos = containerWidth; this.yPos = 0; this.remove = false; this.cloudGap = getRandomNum( Cloud.config.MIN_CLOUD_GAP , Cloud.config.MAX_CLOUD_GAP ); this.init(); } Cloud.config = { HEIGHT: 14 , MAX_CLOUD_GAP: 400 , MAX_SKY_LEVEL: 30 , MIN_CLOUD_GAP: 100 , MIN_SKY_LEVEL: 71 , WIDTH: 46 , }; Cloud.prototype = { init: function () { this.yPos = getRandomNum( Cloud.config.MAX_SKY_LEVEL , Cloud.config.MIN_SKY_LEVEL ); this.draw(); } , draw: function () { this.canvasCtx.save(); var sourceWidth = Cloud.config.WIDTH; var sourceHeight = Cloud.config.HEIGHT; if (IS_HIDPI) { sourceWidth = sourceWidth * 2; sourceHeight = sourceHeight * 2; } this.canvasCtx.drawImage( Runner.imageSprite , this.spritePos.x , this.spritePos.y , sourceWidth , sourceHeight , this.xPos , this.yPos , Cloud.config.WIDTH , Cloud.config.HEIGHT ); this.canvasCtx.restore(); } , update: function (speed) { if (!this.remove) { this.xPos -= Math.ceil(speed); this.draw(); if (!this.isVisible()) { this.remove = true; } } } , isVisible: function () { return this.xPos + Cloud.config.WIDTH > 0; } , }; function HorizonLine(canvas, spritePos) { this.spritePos = spritePos; this.canvas = canvas; this.canvasCtx = canvas.getContext("2d"); this.sourceDimensions = {}; this.dimensions = HorizonLine.dimensions; this.sourceXPos = [ this.spritePos.x , this.spritePos.x + this.dimensions.WIDTH , ]; this.xPos = []; this.yPos = 0; this.bumpThreshold = 0.5; this.setSourceDimensions(); this.draw(); } HorizonLine.dimensions = { WIDTH: 600 , HEIGHT: 12 , YPOS: 127 , }; HorizonLine.prototype = { setSourceDimensions: function () { for (var dimension in HorizonLine.dimensions) { if (IS_HIDPI) { if (dimension != "YPOS") { this.sourceDimensions[dimension] = HorizonLine.dimensions[dimension] * 2; } } else { this.sourceDimensions[dimension] = HorizonLine.dimensions[dimension]; } this.dimensions[dimension] = HorizonLine.dimensions[dimension]; } this.xPos = [0, HorizonLine.dimensions.WIDTH]; this.yPos = HorizonLine.dimensions.YPOS; } , getRandomType: function () { return Math.random() > this.bumpThreshold ? this.dimensions.WIDTH : 0; } , draw: function () { this.canvasCtx.drawImage( Runner.imageSprite , this.sourceXPos[0] , this.spritePos.y , this.sourceDimensions.WIDTH , this.sourceDimensions.HEIGHT , this.xPos[0] , this.yPos , this.dimensions.WIDTH , this.dimensions.HEIGHT ); this.canvasCtx.drawImage( Runner.imageSprite , this.sourceXPos[1] , this.spritePos.y , this.sourceDimensions.WIDTH , this.sourceDimensions.HEIGHT , this.xPos[1] , this.yPos , this.dimensions.WIDTH , this.dimensions.HEIGHT ); } , updateXPos: function (pos, increment) { var line1 = pos; var line2 = pos == 0 ? 1 : 0; this.xPos[line1] -= increment; this.xPos[line2] = this.xPos[line1] + this.dimensions.WIDTH; if (this.xPos[line1] <= -this.dimensions.WIDTH) { this.xPos[line1] += this.dimensions.WIDTH * 2; this.xPos[line2] = this.xPos[line1] - this.dimensions.WIDTH; this.sourceXPos[line1] = this.getRandomType() + this.spritePos.x; } } , update: function (deltaTime, speed) { var increment = Math.floor(speed * (FPS / 1000) * deltaTime); if (this.xPos[0] <= 0) { this.updateXPos(0, increment); } else { this.updateXPos(1, increment); } this.draw(); } , reset: function () { this.xPos[0] = 0; this.xPos[1] = HorizonLine.dimensions.WIDTH; } , }; function getRandomNum(min, max) { return Math.floor(Math.random() * (max - min + 1)) + min; } function vibrate(duration) { if (IS_MOBILE && window.navigator.vibrate) { window.navigator.vibrate(duration); } } tusdino.hacked.DistanceMeter.dimensions = { WIDTH: 10 , HEIGHT: 13 , DEST_WIDTH: 11 , }; tusdino.hacked.DistanceMeter.yPos = [ 0, 13, 27, 40, 53, 67, 80, 93, 107, 120 , ]; tusdino.hacked.DistanceMeter.config = { MAX_DISTANCE_UNITS: 5 , ACHIEVEMENT_DISTANCE: 100 , COEFFICIENT: 0.025 , FLASH_DURATION: 1000 / 4 , FLASH_ITERATIONS: 3 , }; tusdino.hacked.DistanceMeter.prototype = { init: function (width) { var maxDistanceStr = ""; this.calcXPos(width); this.maxScore = this.maxScoreUnits; for (var i = 0; i < this.maxScoreUnits; i++) { this.draw(i, 0); this.defaultString += "0"; maxDistanceStr += "9"; } this.maxScore = parseInt(maxDistanceStr); } , calcXPos: function (canvasWidth) { this.x = canvasWidth - DistanceMeter.dimensions.DEST_WIDTH * (this.maxScoreUnits + 1); } , draw: function (digitPos, value, opt_highScore) { var sourceWidth = DistanceMeter.dimensions.WIDTH; var sourceHeight = DistanceMeter.dimensions.HEIGHT; var sourceX = DistanceMeter.dimensions.WIDTH * value; var sourceY = 0; var targetX = digitPos * DistanceMeter.dimensions.DEST_WIDTH; var targetY = this.y; var targetWidth = DistanceMeter.dimensions.WIDTH; var targetHeight = DistanceMeter.dimensions.HEIGHT; if (IS_HIDPI) { sourceWidth *= 2; sourceHeight *= 2; sourceX *= 2; } sourceX += this.spritePos.x; sourceY += this.spritePos.y; this.canvasCtx.save(); if (opt_highScore) { var highScoreX = this.x - this.maxScoreUnits * 2 * DistanceMeter.dimensions.WIDTH; this.canvasCtx.translate(highScoreX, this.y); } else { this.canvasCtx.translate(this.x, this.y); } this.canvasCtx.drawImage( this.image , sourceX , sourceY , sourceWidth , sourceHeight , targetX , targetY , targetWidth , targetHeight ); this.canvasCtx.restore(); } , getActualDistance: function (distance) { return distance ? Math.round(distance * this.config.COEFFICIENT) : 0; } , update: function (deltaTime, distance) { var paint = true; var playSound = false; if (!this.acheivement) { distance = this.getActualDistance(distance); if ( distance > this.maxScore && this.maxScoreUnits == this.config.MAX_DISTANCE_UNITS ) { this.maxScoreUnits++; this.maxScore = parseInt(this.maxScore + "9"); } else { this.distance = 0; } if (distance > 0) { if (distance % this.config.ACHIEVEMENT_DISTANCE == 0) { this.acheivement = true; this.flashTimer = 0; playSound = true; } var distanceStr = (this.defaultString + distance).substr( -this.maxScoreUnits ); this.digits = distanceStr.split(""); } else { this.digits = this.defaultString.split(""); } } else { if (this.flashIterations <= this.config.FLASH_ITERATIONS) { this.flashTimer += deltaTime; if (this.flashTimer < this.config.FLASH_DURATION) { paint = false; } else if (this.flashTimer > this.config.FLASH_DURATION * 2) { this.flashTimer = 0; this.flashIterations++; } } else { this.acheivement = false; this.flashIterations = 0; this.flashTimer = 0; } } if (paint) { for (var i = this.digits.length - 1; i >= 0; i--) { this.draw(i, parseInt(this.digits[i])); } } this.drawHighScore(); return playSound; } , drawHighScore: function () { this.canvasCtx.save(); this.canvasCtx.globalAlpha = 0.8; for (var i = this.highScore.length - 1; i >= 0; i--) { this.draw(i, parseInt(this.highScore[i], 10), true); } this.canvasCtx.restore(); } , setHighScore: function (distance) { distance = this.getActualDistance(distance); var highScoreStr = (this.defaultString + distance).substr( -this.maxScoreUnits ); this.highScore = ["10", "11", ""].concat(highScoreStr.split("")); } , reset: function () { this.update(0); this.acheivement = false; } , }; var Trex = tusdino.hacked.Trex; var DistanceMeter = tusdino.hacked.DistanceMeter; var Obstacle = tusdino.hacked.Obstacle; var Horizon = tusdino.hacked.Horizon; Runner.instance_.init = function () { hackedInit.call(Runner.instance_); }; Runner.instance_.init(); function customUpdate() { if (document.getElementById("shareBlock")) { var sb = document.getElementById("shareBlock"); sb.style.display = "none"; } this.drawPending = false; var now = getTimeStamp(); var deltaTime = now - (this.time || now); this.time = now; if (this.activated) { this.clearCanvas(); if (this.tRex.jumping) { this.tRex.updateJump(deltaTime); } this.runningTime += deltaTime; var hasObstacles = this.runningTime > this.config.CLEAR_TIME; if (this.tRex.jumpCount == 1 && !this.playingIntro) { this.playIntro(); } if (this.playingIntro) { this.horizon.update(0, this.currentSpeed, hasObstacles); } else { deltaTime = !this.started ? 0 : deltaTime; this.horizon.update(deltaTime, this.currentSpeed, hasObstacles); } var collision = hasObstacles && checkForCollision(this.horizon.obstacles[0], this.tRex); if (!collision) { this.distanceRan += (this.currentSpeed * deltaTime) / this.msPerFrame; if (this.currentSpeed < this.config.MAX_SPEED) { this.currentSpeed += this.config.ACCELERATION; } } else { if (tusdino.cheats.obliterate) { Runner.instance_.horizon.obstacles.length > 0 ? (Runner.instance_.horizon.obstacles = Runner.instance_.horizon.obstacles.slice( 1 , Runner.instance_.horizon.obstacles.length )) : ""; } else if (tusdino.cheats.obstacleBypass) { Runner.instance_.tRex.xPos += Runner.instance_.horizon.obstacles[0].xPos / 2; setTimeout(() => { Runner.instance_.tRex.xPos = x; }, 100); } else { this.gameOver(); } } var playAcheivementSound = this.distanceMeter.update( deltaTime , Math.ceil(this.distanceRan) ); if (playAcheivementSound) { this.playSound(this.soundFx.SCORE); } } if (!this.crashed) { this.tRex.update(deltaTime); if (this.raq) this.raq(); } } function customRestart() { if (!this.raqId) { tusdino.modules.isDead = false; this.playCount++; this.runningTime = 0; this.activated = true; this.crashed = false; this.distanceRan = 0; this.setSpeed(this.config.SPEED); this.time = getTimeStamp(); this.containerEl.classList.remove(Runner.classes.CRASHED); this.clearCanvas(); this.distanceMeter.reset(this.highestScore); this.horizon.reset(); this.tRex.reset(); this.playSound(this.soundFx.BUTTON_PRESS); this.update(); x = Runner.instance_.tRex.xPos; } } Runner.instance_.restart = function () { customRestart.call(Runner.instance_); }; if (Runner.instance_.started) { Runner.instance_.restart(); } var oldVisChange = Runner.instance_.onVisibilityChange; Runner.instance_.onVisibilityChange = function (e) { if (!tusdino.cheats.forcefocus) { oldVisChange.bind(this)(e); } }; Runner.instance_.startGame = function () { this.runningTime = 0; this.playingIntro = false; this.tRex.playingIntro = false; this.containerEl.style.webkitAnimation = ""; this.playCount++; document.addEventListener( Runner.events.VISIBILITY , this.onVisibilityChange.bind(this) ); window.addEventListener( Runner.events.BLUR , this.onVisibilityChange.bind(this) ); window.addEventListener( Runner.events.FOCUS , this.onVisibilityChange.bind(this) ); x = Runner.instance_.tRex.xPos; }; window.oldWd = Runner.instance_.tRex.config.WIDTH_DUCK; window.oldW = Runner.instance_.tRex.config.WIDTH; window.oldH = Runner.instance_.tRex.config.HEIGHT; Runner.instance_.tRex.draw = function (x, y) { if (tusdino.cheats.rainbowglow) { hslStart = true; this.canvasCtx.shadowColor = hslCol; this.canvasCtx.shadowOffsetX = 0; this.canvasCtx.shadowOffsetY = 0; this.canvasCtx.shadowBlur = 15; } if (tusdino.cheats.glow) { this.canvasCtx.shadowColor = "yellow"; this.canvasCtx.shadowOffsetX = 0; this.canvasCtx.shadowOffsetY = 0; this.canvasCtx.shadowBlur = 15; } var sourceX = x; var sourceY = y; var sourceWidth = this.ducking && this.status != Trex.status.CRASHED ? this.config.WIDTH_DUCK : this.config.WIDTH; var sourceHeight = this.config.HEIGHT; if (IS_HIDPI) { sourceX *= 2; sourceY *= 2; sourceWidth *= 2; sourceHeight *= 2; } sourceX += this.spritePos.x; sourceY += this.spritePos.y; if (this.ducking && this.status != Trex.status.CRASHED) { this.canvasCtx.drawImage( Runner.imageSprite , sourceX , sourceY , sourceWidth , sourceHeight , this.xPos , (Runner.instance_.tRex.yPos+Runner.instance_.tRex.config.HEIGHT)-(Runner.instance_.tRex.config.HEIGHT*((tusdino.cheats.size))) , Runner.instance_.tRex.config.WIDTH_DUCK*(tusdino.cheats.size) , Runner.instance_.tRex.config.HEIGHT*(tusdino.cheats.size) ); } else { if (this.ducking && this.status == Trex.status.CRASHED) { this.xPos++; } this.canvasCtx.drawImage( Runner.imageSprite , sourceX , sourceY , sourceWidth , sourceHeight , this.xPos , (Runner.instance_.tRex.yPos+Runner.instance_.tRex.config.HEIGHT)-(Runner.instance_.tRex.config.HEIGHT*((tusdino.cheats.size))) , Runner.instance_.tRex.config.WIDTH*(tusdino.cheats.size) , Runner.instance_.tRex.config.HEIGHT*(tusdino.cheats.size) ); } if (tusdino.cheats.rainbowglow) { this.canvasCtx.shadowColor = ""; this.canvasCtx.shadowOffsetX = 0; this.canvasCtx.shadowOffsetY = 0; this.canvasCtx.shadowBlur = 0; } if (tusdino.cheats.glow) { this.canvasCtx.shadowColor = ""; this.canvasCtx.shadowOffsetX = 0; this.canvasCtx.shadowOffsetY = 0; this.canvasCtx.shadowBlur = 0; } }; Runner.instance_.update = function () { customUpdate.call(Runner.instance_); if (!tusdino.cheats.forcepause) { if (tusdino.cheats.obstacleFloat) { if (Runner.instance_.horizon.obstacles[0]) { for (var i in Runner.instance_.horizon.obstacles) { Runner.instance_.horizon.obstacles[i].yPos = 25; } } } if (tusdino.cheats.objectEsp) { var ctx = Runner.instance_.canvasCtx; if (Runner.instance_.horizon.obstacles[0]) { for (var i in Runner.instance_.horizon.obstacles) { ctx.beginPath(); ctx.strokeStyle = "#EB5834"; ctx.strokeRect( Runner.instance_.horizon.obstacles[i].xPos - 1 , Runner.instance_.horizon.obstacles[i].yPos - 0.5 , Runner.instance_.horizon.obstacles[i].width + 3 , Runner.instance_.horizon.obstacles[i].typeConfig.height + 2 ); ctx.stroke(); } } } if (tusdino.cheats.rainbowSquarePlayer) { Runner.instance_.canvasCtx.beginPath(); hslStart = true; Runner.instance_.canvasCtx.fillStyle = hslCol; Runner.instance_.canvasCtx.fillRect( Runner.instance_.tRex.xPos , Runner.instance_.tRex.ducking ? Runner.instance_.tRex.yPos + 15 : Runner.instance_.tRex.yPos , Runner.instance_.tRex.ducking ? Runner.instance_.tRex.config.WIDTH_DUCK + 2 : Runner.instance_.tRex.config.WIDTH + 2 , Runner.instance_.tRex.ducking ? Runner.instance_.tRex.config.HEIGHT_DUCK + 2 : Runner.instance_.tRex.config.HEIGHT + 2 ); Runner.instance_.canvasCtx.closePath(); } if (tusdino.cheats.arc) { Runner.instance_.canvasCtx.beginPath(); Runner.instance_.canvasCtx.strokeStyle = "#FF0000"; Runner.instance_.canvasCtx.arc( Runner.instance_.tRex.xPos + 23 , Runner.instance_.tRex.yPos + 20 , 30 , 0 , 2 * Math.PI ); Runner.instance_.canvasCtx.stroke(); } if (tusdino.cheats.watermark) { var ctx = Runner.instance_.canvasCtx; function ff() { ctx.beginPath(); ctx.globalAlpha = 0.6; ctx.fillStyle = "#212121"; ctx.fillRect(4, 4, 70, 30); ctx.globalAlpha = 1; ctx.closePath(); } function dd() { ctx.beginPath(); ctx.globalAlpha = 0.6; ctx.strokeStyle = "#425AF5"; ctx.strokeRect(3, 3, 72, 32); ctx.globalAlpha = 1; ctx.closePath(); } function hh() { ctx.beginPath(); ctx.globalAlpha = 1; ctx.fillStyle = "#FFFFFF"; ctx.font = "bolder 15px sans-serif"; ctx.fillText(atob("VHVzRGlubw=="), 10, 24, 25252); ctx.globalAlpha = 1; ctx.closePath(); } dd(); ff(); hh(); } if (Runner.instance_.horizon.obstacles[0] && tusdino.cheats.tracer) { for (var i in Runner.instance_.horizon.obstacles) { Runner.instance_.canvasCtx.beginPath(); hslStart = true; Runner.instance_.canvasCtx.moveTo( Runner.instance_.tRex.xPos + 23 , Runner.instance_.tRex.yPos + 10 ); Runner.instance_.canvasCtx.lineTo( Runner.instance_.horizon.obstacles[i].xPos + 10 , Runner.instance_.horizon.obstacles[i].yPos + 10 ); Runner.instance_.canvasCtx.strokeStyle = hslCol; Runner.instance_.canvasCtx.stroke(); } } if ( Runner.instance_.horizon.obstacles[0] && tusdino.cheats.lazervisual ) { if (!laz) laz = Runner.instance_.horizon.obstacles[0]; Runner.instance_.canvasCtx.beginPath(); Runner.instance_.canvasCtx.moveTo( Runner.instance_.tRex.xPos + 23 , Runner.instance_.tRex.yPos + 10 ); Runner.instance_.canvasCtx.lineTo(laz.xPos + 10, laz.yPos + 10); Runner.instance_.canvasCtx.strokeStyle = "Red"; Runner.instance_.canvasCtx.stroke(); if (tusdino.cheats.lazer) Runner.instance_.horizon.obstacles.length > 0 ? (Runner.instance_.horizon.obstacles = Runner.instance_.horizon.obstacles.slice( 1 , Runner.instance_.horizon.obstacles.length )) : ""; tusdino.cheats.lazer = false; } if ( Runner.instance_.horizon.obstacles[0] && tusdino.cheats.notifier ) { for (var i in Runner.instance_.horizon.obstacles) { Runner.instance_.canvasCtx.beginPath(); Runner.instance_.canvasCtx.moveTo( Runner.instance_.horizon.obstacles[i].xPos - 70 , 130 ); Runner.instance_.canvasCtx.lineTo( Runner.instance_.horizon.obstacles[i].xPos - 40 , 130 ); Runner.instance_.canvasCtx.strokeStyle = "Blue"; Runner.instance_.canvasCtx.stroke(); } } if (tusdino.cheats.esp) { Runner.instance_.canvasCtx.beginPath(); Runner.instance_.canvasCtx.strokeStyle = "Red"; Runner.instance_.canvasCtx.rect( Runner.instance_.tRex.xPos , Runner.instance_.tRex.ducking ? Runner.instance_.tRex.yPos + 15 : Runner.instance_.tRex.yPos , Runner.instance_.tRex.ducking ? Runner.instance_.tRex.config.WIDTH_DUCK + 2 : Runner.instance_.tRex.config.WIDTH + 2 , Runner.instance_.tRex.ducking ? Runner.instance_.tRex.config.HEIGHT_DUCK + 2 : Runner.instance_.tRex.config.HEIGHT + 2 ); Runner.instance_.canvasCtx.stroke(); } } }; var darkMode = ((typeof getMetablockData().find((a) => a.block == 'dark-mode') != typeof undefined) ? (getMetablockData().find((a) => a.block == 'dark-mode').data.startsWith('on')) : (true));; // Style and UI var StylePanel = document.createElement("style"); StylePanel.innerHTML = ` #tradingmenu hr { border: solid 0.1px white; border-radius: 66px; } #tradingtabs::-webkit-scrollbar { display: none; } #tradingtabs::-webkit-scrollbar { width: 5px; height: 8px; background-color: #aaa; /* or add it to the track */ } #tradingtabs::-webkit-scrollbar-thumb { background: #000; } #tradingpagesettings button { border-radius: 0; color: #adadad; border: solid 2px #adadad; } .tradingshow button { background: none; border: solid 1px #a7a7ff; color: #a7a7ff; padding: 7px; transition: 0.5s; cursor: pointer; height: 30px; float: initial; border-radius: 20px; font-weight: bolder; padding-left: 18px; padding-right: 18px; } #tradingmenuheader { line-height: 1.13; } .tradingshow .tradingcheckbox { background: none; border: solid 1px #1212a5; color: #4d4df5; margin-bottom:5px; padding: 7px; transition: 0.5s; cursor: pointer; border-radius: 90px; padding-left: 18px; padding-right: 18px; } .tradingshow .tradingcheckbox:hover { background: none; border: solid 1px #1313b9; color: #0404cb; padding: 7px; transition: 0.5s; cursor: pointer; border-radius: 90px; padding-left: 18px; padding-right: 18px; } .swal2-container { z-index: 100000000000000000000; } .tradingshow button:hover { border: solid 1px #7d7dff; transition: 0.5s; color: #8080ff; } .tradingshow input::placeholder { color: #8272bf; opacity:0.8; transition:1s; } .tradingshow input:focus::placeholder { color: #86c7ff; transition:1s; } .tradingshow input:focus { border-color: #86c7ff; transition: 1s; } .tradingshow input { padding: 7px; transition: 1s; outline: none; margin-bottom:5px; border-radius: 20px; border: solid 1px #a7a7ff; color: #a7a7ff; background: transparent; } .tradingtab { font-weight: 700; padding: 0px; border-radius: 0px; height: -webkit-fill-available; width: 100px; line-height: 2; font-family: system-ui; margin:0; background: transparent; font-size: 15px; cursor: pointer; border: none; ${ // Gone for now /* `border-left: solid 1px #9191ff; border-right: solid 1px #9191ff; ` */ `` } color: #855dff; } .tradingpage { text-align: left; z-index: -1; display: none; } .tradingshow { z-index: 1; padding: 10px; font-weight: 400; display: block; } .tradinginputset { display: inline-flex; } .tradinginputset button { margin-bottom:5px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; } .tradinginputset select { background: none; border: solid 1px #a7a7ff; color: #a7a7ff; padding: 7px; transition: 0.5s; cursor: pointer; width: 120px; outline: none; height: 30px; float: initial; text-align: center; border-radius: 20px; border-bottom-left-radius: 0px; border-top-left-radius: 0px; padding-left: 18px; padding-right: 18px; } #tradingborder { background: linear-gradient(45deg, #a9b8ff, #4b10ff); height: 2px; animation: an 30s ease infinite; background-size: 1000% 1000%; } .tradingactive { filter: brightness(1.2); font-weight: 400; } #tradingmenu { color: white; font-weight: 400; font-size: initial; font-family: sans-serif; } #tradingmenu *:not(button, input, .tradingtab) { cursor:default; margin:0; box-sizing: revert; } #tradingmenu a { color: white; text-decoration: underline; cursor: pointer; } .tradingshow input { margin:0; border-top-left-radius: 0px; border-bottom-left-radius: 0px; font-size: 13px; box-sizing: revert; line-height: 14px; cursor: text; margin-bottom:5px; } .tradingshow button { margin:0; font-size: 13px; line-height: 14px; box-sizing: revert; cursor: pointer; margin-bottom:5px; }`; var Panel = document.createElement("div"); Panel.innerHTML = `<div style="transform: scale(0.8); top: 98px; position: fixed; left: 309px; z-index: 2147483647;" id="tradingmenu"> <div style=" height: 353px; font-weight: bolder; width: 599px; background: #1a1a1a; "> <div style=""> <div style=" font-size: 20px; font-family: revert; padding-top: 6px; padding-left: 6px; padding-bottom: 4px; " id="tradingmenuheader">${atob("VHVzRGlubw==")} - <i style=" font-size: 16px; ">${tusdino.info.version} [By ${atob( "TGFwaWRl" )}]</i><img src="https://github.com/Fault-Utilities/TusDino-Chrome-Dino-Mod-Menu/blob/main/assets/Logo.png?raw=true" style="height: 24px;position: fixed;display: inline;margin-top: -2px;margin-left: 2px;right: 274px;margin-right: 3px;"><a target="blank" href="https://discord.gg/6eaDrx5J9s" style=" font-size: 17px; color: lightblue; float: right; margin-right: 11px; cursor: pointer; ">Discord</a><a target="blank" href="https://github.com/Case-Clicker-2-Utilities/TusDino-Chrome-Dino-Mod-Menu" style=" font-size: 17px; color: lightblue; float: right; margin-right: 10px; cursor: pointer; ">Github</a><a target="blank" href="https://www.youtube.com/channel/UCRA3KXViuDmsmfuP0RF45_w?sub_confirmation=1" style=" font-size: 17px; color: lightblue; float: right; margin-right: 10px; cursor: pointer; ">YouTube</a> </div> <div id="tradingborder" style=" "></div> <div id="trading_contents" style=""> <div style=" height: 44px; outline: none; display: flex; overflow-x: auto; background: #16161a; border-bottom: solid 2px #6e6dc7; "> <button tab="main" title="Cheats that effect the player" class="tradingtab tradingactive">Player</button> <button tab="game" title="Cheats that effect the whole game" class="tradingtab">Game</button> <button tab="movement" title="Cheats that effect the movement" class="tradingtab">Movement</button> <button tab="visual" title="Cheats that effect the visuals of the game" class="tradingtab">Visuals</button> <button tab="dev" title="Developer tools to help better modify the game" class="tradingtab">Developer</button> <button tab="other" title="Cheats and utilities to better edit the game, or just random unkwon cheats to bug the game (Random cheats I created)" class="tradingtab">Miscs</button> <button tab="settings" title="Change the settings of cheats or the UI. Or TusDino in general [COMING SOON]" class="tradingtab">Settings</button> </div> <div> <div style=" background: #161616; height: 223px; overflow-y: auto; " id="tradingtabs"> <div class="tradingshow" id="tradingpagemain" style=""> <div class="tradinginputset"><button id="setsize" title="Doubles the Dinos Size by a number">Set Double Dino Size</button><input id="setsizecheatinput" style=" width: 78px;" value = "1" placeholder="1"></div> <button id="noclip" class="tradingcheckbox" title="You can phase thru any object and enemy">No Clip - OFF</button> <button id="instantrespawn" class="tradingcheckbox" title="Instantly respawns when you die">Instant Respawn - OFF</button> <button id="invisibilitycheat" class="tradingcheckbox" title="Makes the player invisible">Invisibility - OFF</button> <button id="bhop" class="tradingcheckbox" title="Makes the player jump automatically">Bhop - OFF</button> <button id="restartgame" title="Need a restart? Try this, it will force your player to respawn">Restart</button> <button id="killplayer" title="Instantly kills your T-Rex player">Kill Player</button> <button id="autoplayer" class="tradingcheckbox" title="Make a bot play for you (Note: This isn't the best autoplayer, it will still lose sometimes, we might change this to a better autoplayer)">Autoplayer - OFF</button> <div class="tradinginputset"><button id="setgravity" title="Change the gravity of the tRex to whatever you want">Set Gravity</button><input id="setgravitycheatinput" style=" width: 78px;" value = "0.6" placeholder="0.6"></div> <div class="tradinginputset"><button id="setskin" title="Changes the dino skin to a list of skins, this will soon be customizable">Set Skin (Buggy)</button><select id="setskincheatselect"> <option value="default">Default</option> <option value="batman">Batman Colored</option> <option value="sonic">Sonic</option> <option value="soniccol">Sonic Colored</option> <option value="soniccol2">Sonic Colored (2)</option> <option value="dinocol">Dino Colored</option> <option value="dinocol2">Dino Colored (2)</option> <option value="godzilla">Godzilla Colored</option> <option value="joker">Joker Colored</option> <option value="mario">Mario</option> <option value="mariocol">Mario Colored</option> <option value="mario2">Mario (2)</option> <option value="mariocol2">Mario Colored (2)</option> <option value="minecraft">Minecraft</option> <option value="naruto">Naruto Colored</option> <option value="noface">Noface Halloween</option> <option value="nyancat">Nyan Cat</option> <option value="pikachu">Pikachu</option> <option value="santa">Santa Colored</option> <option value="pikachucol">Pikachu Colored</option> </select> </div> </div> <div class="tradingpage" id="tradingpageother" style=""> <button id="rainbowbackground" class="tradingcheckbox" title="Make the background become rainbow">Rainbow Background - OFF</button> <button id="rainbowsquareplayer" class="tradingcheckbox" title="Make the player become rainbow square">Rainbow Square Player - OFF</button> <button id="stormcloud" class="tradingcheckbox" title="Continuously spam clouds in the sky">Storm Cloud - OFF</button> <button id="obstacleFloat" class="tradingcheckbox" title="Makes all near-by obstacles go up in the air">Obstacle Float - OFF</button> <button id="arc" class="tradingcheckbox" title="Puts a red circle ring around the player">Arc - OFF</button> <button id="toggledarkmode" title="Enable or disable in-game dark mode">Dark Game Mode - ${darkMode ? "ON" : "OFF"}</button> <button id="noobstacle" class="tradingcheckbox" title="Removes all nearby obstacles">No Obstacle - OFF</button> <button id="lazervison" title="It remove the nearest obstacle, with a lazer">Lazer Vision</button> <button id="lazervisonkey" class="tradingcheckbox" title="If you press L, it will active lazer vison">Lazer Vision Key (L) - OFF</button> <button id="obliterate" class="tradingcheckbox" title="When the player collides with the obstacle, the obstacle gets destroyed instead of the player">Obliterate Obstacles - OFF</button> <button id="addcloud" title="Forces a cloud into the game">Add Cloud</button> <button id="removecloud" title="Removes the newest cloud">Remove Cloud</button> <button id="removeallcloud" title="Removes all clouds">Remove All Clouds</button> <button id="removeallobstacle" title="Removes all near-by obstacles">Remove Near Obstacles</button> <button id="removeobstacle" title="Removes the nearest obstacle">Remove Obstacle</button> <button id="addobstacle" title="Creates a new obstacle">Add Obstacle</button> <p> </div> <div class="tradingpage" id="tradingpagesettings" style=""> <div style="margin-bottom: 19px;"> <h2><img src="https://cdn.glitch.global/4aba5d04-d76d-4769-bec8-f2da58f4b0ac/SettingsIcon.png?v=1680464901415" height="30" style=" position: relative; top: 7px; ">Settings</h2> </div> <div><button title="Credits for TusDino" id="tradingcredits">Credits</button> <button title="What's new in your TusDino version" id="tradingwhatsnew">Whats New</button> <br> <div class="tradinginputset"><button id="setmenuscale" title="Changes the mod menu's scale">Set Menu Scale</button><input id="setmenuscaleinput" style=" width: 78px;" min="0.7" max="1.2" value="0.9" placeholder="0.9" type = "number" step="0.1"></div> <br> <div class="tradinginputset"><button id="setmenuopacity" title="Changes the mod menu's opacity">Set Menu Opacity</button><input id="menuopacityinput" style=" width: 78px;" min="0.2" max="1" value="1" placeholder="1" type = "number" step="0.1"></div> </div> <br> <hr> </div> <div class="tradingpage" id="tradingpagedev" style=""> <div class="tradinginputset"><button id="setxaxis" title="Changes the players X axis">Teleport X axis</button><input id="setxaxischeatinput" style=" width: 78px;" value = "0" placeholder="0"></div> <div class="tradinginputset"><button id="setyaxis" title="Changes the players Y axis">Teleport Y axis</button><input id="setyaxischeatinput" style=" width: 78px;" value = "93" placeholder="93"></div> </div> <div class="tradingpage" id="tradingpagemovement" style=""> <div class="tradinginputset"><button id="setspeed" title="Sets your players speed, if you put too much it can bug out">Set Speed</button><input id="setspeedcheatinput" style=" width: 78px;" value = "6.5" placeholder="6.5"></div> <div class="tradinginputset"><button id="setjumpheight" title="Changes how high the Trex can jump">Set Jump Height</button><input id="setjumpheightcheatinput" style=" width: 78px;" value = "10" placeholder="10"></div> <div class="tradinginputset"><button id="setdropvelocity" title="Changes how high the Trex can jump">Set Drop Velocity</button><input id="setdropvelocitycheatinput" style=" width: 78px;" value = "-10" placeholder="-10"></div> <button id="glide" class="tradingcheckbox" title="Make's your player glide into the air and fly until ducking">Glide - OFF</button> <button id="fly" class="tradingcheckbox" title="You now have the ability to fly! You can use 'W' to go higher and 'S' to go lower">Fly - OFF</button> <button id="highjump" class="tradingcheckbox" title="Makes you jump higher">High Jump - OFF</button> <button id="fastfall" class="tradingcheckbox" title="You can fall more faster">Fast Fall - OFF</button> <button id="walk" class="tradingcheckbox" title="You now have the ability to get out of the window and walk use 'A' to go left and 'D' to go right">Walk - OFF</button> <button id="obstacleBypass" class="tradingcheckbox" title="This cheat makes you zoom thru the obstacles">Obstacle Bypass - OFF</button> <div class="tradinginputset"><button id="setwalkspeed" title="Set the walk cheats speed">Set Walk Speed (Walk Cheat)</button><input id="setwalkspeedcheatinput" style=" width: 78px;" value = "1" placeholder="1"></div> <div class="tradinginputset"><button id="setflyspeed" title="Set the fly cheats speed">Set Fly Speed (Fly Cheat)</button><input id="setflyspeedcheatinput" style=" width: 78px;" value = "1" placeholder="1"></div> <button id="blockyjump" class="tradingcheckbox" title="You can have a robotic jump">Blocky Jump - OFF</button> <button id="airjump" class="tradingcheckbox" title="You can jump forever non-stop">Airjump - OFF</button> </div> <div class="tradingpage" id="tradingpagevisual" style=""> <button id="esp" class="tradingcheckbox" title="This cheat shows a box around you">ESP - OFF</button> <button id="tracers" class="tradingcheckbox" title="Lines go from you to all the obstacles">Tracers - OFF</button> <button id="glow" class="tradingcheckbox" title="Makes the player have a yellow glow around them">Glow - OFF</button> <button id="rainbowglow" class="tradingcheckbox" title="Makes the player have a rainbow glow around them">Rainbow Glow - OFF</button> <button id="jumpnotifier" class="tradingcheckbox" title="Small lines on the screen tell you where to jump">Jump Notifier - OFF</button> <button id="watermark" class="tradingcheckbox" title="A watermark to show you're using TusDino">Watermark - ON </button> <button id="obstacleesp" class="tradingcheckbox" title="ESP for obstacles">Obstacle ESP - OFF</button> </div> <div class="tradingpage" id="tradingpagegame" style=""> <div class="tradinginputset"><button id="setfps" title="Sets your games FPS, which will make it faster">Set FPS</button><input id="setfpscheatinput" style=" width: 78px;" value = "60" placeholder="60"></div> <button id="autofocus" class="tradingcheckbox" title="Automatically focuses on the game whenever you switch out from the tab, it will still play and not pause">Auto Focus - OFF</button> <button id="forcefocus" class="tradingcheckbox" title="Just like auto focus, but this time ignores if you ever switched tabs">Force Focus - OFF</button> <button id="autocontinuedeath" class="tradingcheckbox" title="Automatically continues the game when you die">Auto Continue Death - OFF</button> <button id="continuedeath" class="tradingcheckbox" title="Continues the game when you die">Continue Death</button> <div class="tradinginputset"><button id="setgamespeed" title="Sets your games speed, if you put too much it can bug out">Set Game Speed</button><input id="setgamespeedcheatinput" style=" width: 78px;" value = "0.001" placeholder="0.001"></div> <button id="duckAndJump" class="tradingcheckbox" title="You can still jump when ducking">Duck and Jump - OFF</button> <button id="playingIntro" class="tradingcheckbox" title="Still get scored while your player is inactive">Playing Intro - OFF</button> <div style=""class="tradinginputset"><button id="setscore" title="Sets your players score" style="">Set Score</button><input id="setscorecheatinput" style=" width: 78px;" value = "999999" placeholder="999999"></div><div style=""class="tradinginputset"><button id="sethighscore" title="Sets your players highest score" style="">Set Highest Score</button><input id="sethighscorecheatinput" style=" width: 78px;" value = "999999" placeholder="999999"></div> <button id="mutegame" class="tradingcheckbox" title="Use this if you're tired of hearing the sound">Mute Game - OFF</button> <button id="forcepausegame" class="tradingcheckbox" title="Need to pause the game and everything in the game? Use this">Force Pause Game - OFF</button> <button id="pausegame" class="tradingcheckbox" title="Need to pause the game and everything in the game? Use this">Pause - OFF</button> <div class="tradinginputset"><button id="setscorespeed" title="This will change how fast your score adds up">Set Score Speed</button><input id="setscorespeedcheatinput" style=" width: 78px;" value = "30" placeholder="30"></div> <div class="tradinginputset"><button id="setgroundy" title="Change the Y position of the ground">Set Ground Y</button><input id="setgroundycheatinput" style=" width: 78px;" value = "93" placeholder="93"></div> </div> </div> <div style=" border-top: solid 1px #4f4fe9; font-weight: 100; display: flex; color: #6b6bff; justify-content: space-between; "><div style=" color: white; text-align: left; line-height: 3.4; font-size: 14px; margin-left: 6px; "><a href="https://github.com/Fault-Utilities/TusDino-Chrome-Dino-Mod-Menu/issues/new">Report an issue</a> • <a href="https://github.com/Case-Clicker-2-Utilities/TusDino-Chrome-Dino-Mod-Menu/discussions/new?category=suggestions">Suggest option</a> • <a href="https://github.com/Fault-Utilities/TusDino-Chrome-Dino-Mod-Menu/fork">Fork the Github</a> </div><div style=" align-self: center; font-size: 14px; margin-right: 7px; background: transparent; line-height: 109%; " title="Info">*${tusdino.config.hotkeys.togglemenu.toUpperCase()} to hide/show the menu*<br>Version: ${ tusdino.info.version }<br>Game URL: ${location.hostname}</div></div> </div> </div> </div> </div> <div style=" height: 359px; width: 603px; top: -3px; left: -2px; z-index: -1; position: inherit; background: linear-gradient(45deg, #a9b8ff, #4b10ff); "></div> </div>`; document.body.prepend(Panel); document.body.prepend(StylePanel); function dragElement(elmnt) { var pos1 = 0 , pos2 = 0 , pos3 = 0 , pos4 = 0; if (document.getElementById(elmnt.id + "header")) { document.getElementById(elmnt.id + "header").onmousedown = dragMouseDown; } else { elmnt.onmousedown = dragMouseDown; } function dragMouseDown(e) { e = e || window.event; e.preventDefault(); pos3 = e.clientX; pos4 = e.clientY; document.onmouseup = closeDragElement; document.onmousemove = elementDrag; } function elementDrag(e) { e = e || window.event; e.preventDefault(); pos1 = pos3 - e.clientX; pos2 = pos4 - e.clientY; pos3 = e.clientX; pos4 = e.clientY; elmnt.style.top = elmnt.offsetTop - pos2 + "px"; elmnt.style.left = elmnt.offsetLeft - pos1 + "px"; } function closeDragElement() { document.onmouseup = null; document.onmousemove = null; } } var hslI = 0; var hslCol = "rgb(0, 74 55)"; var hslUp = false; var hslUp2 = false; var laz = false; var hslStart = false; setInterval(() => { if (hslStart) { hslUp = hslUp ? hslI > -1 : hslI < 361; hslCol = "rgb(" + HSLToRGB(hslI, 74, 55).join(", ") + ")"; if (hslUp) { ++hslI; } else { --hslI; } } }); Runner.instance_.clearCanvas = function () { tusdino.saved.clearCanvas.call(this); }; for ( var i = 0; i < document.getElementsByClassName("tradingtab").length; ++i ) { document .getElementsByClassName("tradingtab")[i].addEventListener("click", function () { for ( var gg = 0; gg < document.getElementsByClassName("tradingshow").length; ++gg ) { document.getElementsByClassName("tradingshow")[gg].className = "tradingpage"; } for ( var bb = 0; bb < document.getElementsByClassName("tradingactive").length; ++bb ) { document.getElementsByClassName("tradingactive")[bb].className = "tradingtab"; } // console.log(this); this.classList.add("tradingactive"); document.getElementById( "tradingpage" + this.getAttribute("tab") ).className = "tradingshow"; }); } dragElement(Panel.children[0]); var show = false; document.addEventListener("keydown", function (e) { //console.log(e); if ( e.key.toLowerCase() == tusdino.config.hotkeys.togglemenu && (e.path ? e.path[0].tagName != "INPUT" : e) ) { show = !show; Panel.style.display = show ? "block" : "none"; } if (tusdino.cheats.lazerv) { if (e.key.toLowerCase() == "l") { tusdino.cheats.lazervisual = true; tusdino.cheats.lazer = true; setTimeout(() => { tusdino.cheats.lazervisual = false; laz = false; }, 50); } } if (tusdino.cheats.allowFlyMode) { if ( e.key.toLowerCase() == "w" && (e.path ? e.path[0].tagName != "INPUT" : e) ) { goflydown = true; } if ( e.key.toLowerCase() == "s" && (e.path ? e.path[0].tagName != "INPUT" : e) ) { goflyup = true; } } if (tusdino.cheats.walk) { if ( e.key.toLowerCase() == "d" && (e.path ? e.path[0].tagName != "INPUT" : e) ) { goright = true; } if ( e.key.toLowerCase() == "a" && (e.path ? e.path[0].tagName != "INPUT" : e) ) { goleft = true; } } }); document.addEventListener("keyup", function (e) { if (tusdino.cheats.allowFlyMode) { if ( e.key.toLowerCase() == "w" && (e.path ? e.path[0].tagName != "INPUT" : e) ) { goflydown = false; } if ( e.key.toLowerCase() == "s" && (e.path ? e.path[0].tagName != "INPUT" : e) ) { goflyup = false; } } if (tusdino.cheats.walk) { if ( e.key.toLowerCase() == "d" && (e.path ? e.path[0].tagName != "INPUT" : e) ) { goright = false; } if ( e.key.toLowerCase() == "a" && (e.path ? e.path[0].tagName != "INPUT" : e) ) { goleft = false; } } }); // Listeners / Clicks tusdino.onclick("killplayer", function () { var n = Runner.instance_.gameOver; Runner.instance_.gameOver = tusdino.saved.gameOver; if (Runner.instance_.gameOver.toString() !== "function() {}") { if (tusdino.cheats.instantrespawn) { Runner.instance_.gameOver(); Runner.instance_.restart(); } else { Runner.instance_.gameOver(); } tusdino.msg("Killed player"); } else { swal.fire({ icon: "error" , title: "Can't kill player" , text: "Unable to kill player, can be due to a cheat preventing this being enabled." , }); tusdino.logs.error("Unable to kill dino (killplayer)"); } Runner.instance_.gameOver = n; }); tusdino.onclick("setspeed", function () { var inp = parseFloat( document.getElementById("setspeedcheatinput").value ); if (!isNaN(inp)) { Runner.instance_.setSpeed(inp); tusdino.msg("Set Speed to " + inp); } }); tusdino.onclick("setsize", function () { var inp = parseFloat( document.getElementById("setsizecheatinput").value ); if (!isNaN(inp)) { tusdino.cheats.size = inp; Runner.instance_.tRex.yPos = Runner.instance_.tRex.groundYPos; tusdino.msg("Set Size to " + inp); } }); tusdino.onclick("setjumpheight", function () { var inp = parseFloat( document.getElementById("setjumpheightcheatinput").value ); if (!isNaN(inp)) { Runner.instance_.tRex.setJumpVelocity(inp); tusdino.msg("Set Jump Heigh to " + inp); } }); tusdino.onclick("setdropvelocity", function () { var inp = parseFloat( document.getElementById("setdropvelocitycheatinput").value ); if (!isNaN(inp)) { Runner.instance_.tRex.config.DROP_VELOCITY = (inp); tusdino.msg("Set Drop Velocity to " + inp); } }); tusdino.onclick("setfps", function () { var inp = parseFloat( document.getElementById("setfpscheatinput").value ); if (!isNaN(inp)) { FPS = (inp); tusdino.msg("Set FPS to " + inp); } }); tusdino.onclick("setgamespeed", function () { var inp = parseFloat( document.getElementById("setgamespeedcheatinput").value ); if (!isNaN(inp)) { Runner.instance_.config.ACCELERATION = inp; tusdino.msg("Set game speed to " + inp); } }); tusdino.onclick("setscore", function () { var inp = parseFloat( document.getElementById("setscorecheatinput").value ); if (!isNaN(inp)) { Runner.instance_.distanceRan = inp / Runner.instance_.distanceMeter.config.COEFFICIENT; tusdino.msg("Set score to " + inp); } }); tusdino.onclick("sethighscore", function () { var inp = parseFloat( document.getElementById("sethighscorecheatinput").value ); if (!isNaN(inp)) { Runner.instance_.highestScore = inp / Runner.instance_.distanceMeter.config.COEFFICIENT; Runner.instance_.distanceMeter.setHighScore( inp / Runner.instance_.distanceMeter.config.COEFFICIENT ); tusdino.msg("Set highest score to " + inp); } }); tusdino.onclick("setgroundy", function () { var inp = parseFloat( document.getElementById("setgroundycheatinput").value ); if (!isNaN(inp)) { Runner.instance_.tRex.groundYPos = inp; Runner.instance_.tRex.startJump(0.5); tusdino.msg("Set ground Y to " + inp); } }); tusdino.onclick("setscorespeed", function () { var inp = parseFloat( document.getElementById("setscorespeedcheatinput").value ); if (!isNaN(inp)) { Runner.instance_.msPerFrame = inp / 2; tusdino.msg("Set score speed to " + inp); } }); tusdino.onclick("setxaxis", function () { var inp = parseFloat( document.getElementById("setxaxischeatinput").value ); if (!isNaN(inp)) { Runner.instance_.tRex.xPos = inp; tusdino.msg("Set X axis to " + inp); } }); tusdino.onclick("setyaxis", function () { var inp = parseFloat( document.getElementById("setyaxischeatinput").value ); if (!isNaN(inp)) { Runner.instance_.tRex.yPos = inp; tusdino.msg("Set Y axis to " + inp); } }); tusdino.onclick("setgravity", function () { var inp = parseFloat( document.getElementById("setgravitycheatinput").value ); if (!isNaN(inp)) { Runner.instance_.tRex.config.GRAVITY = inp; tusdino.msg("Set gravity to " + inp); } }); tusdino.onclick("setwalkspeed", function () { var inp = parseFloat( document.getElementById("setwalkspeedcheatinput").value ); if (!isNaN(inp)) { xSpeed = inp; tusdino.msg("Set walk speed to " + inp); } }); tusdino.onclick("setflyspeed", function () { var inp = parseFloat( document.getElementById("setflyspeedcheatinput").value ); if (!isNaN(inp)) { ySpeed = inp; tusdino.msg("Set fly speed to " + inp); } }); let setSkin = function (x1, x2) { let x_1 = document.getElementById("offline-resources-1x"); let x_2 = document.getElementById("offline-resources-2x"); if (x1) x_1.src = x1; if (x2) x_2.src = x2; }; var skins = { default: "https://github.com/Case-Clicker-2-Utilities/TusDino-Chrome-Dino-Mod-Menu/blob/main/skins/default.png?raw=true" , batman: "https://github.com/Case-Clicker-2-Utilities/TusDino-Chrome-Dino-Mod-Menu/blob/main/skins/batman%20colored.png?raw=true" , dinocol2: "https://github.com/Case-Clicker-2-Utilities/TusDino-Chrome-Dino-Mod-Menu/blob/main/skins/dino%20colored%202.png?raw=true" , dinocol: "https://github.com/Case-Clicker-2-Utilities/TusDino-Chrome-Dino-Mod-Menu/blob/main/skins/dino%20colored.png?raw=true" , godzilla: "https://github.com/Case-Clicker-2-Utilities/TusDino-Chrome-Dino-Mod-Menu/blob/main/skins/godzilla.png?raw=true" , joker: "https://github.com/Case-Clicker-2-Utilities/TusDino-Chrome-Dino-Mod-Menu/blob/main/skins/joker.png?raw=true" , mario2: "https://github.com/Case-Clicker-2-Utilities/TusDino-Chrome-Dino-Mod-Menu/blob/main/skins/mario%202.png?raw=true" , mariocol2: "https://github.com/Case-Clicker-2-Utilities/TusDino-Chrome-Dino-Mod-Menu/blob/main/skins/mario%20colored%202.png?raw=true" , mariocol: "https://github.com/Case-Clicker-2-Utilities/TusDino-Chrome-Dino-Mod-Menu/blob/main/skins/mario%20colored.png?raw=true" , mario: "https://github.com/Case-Clicker-2-Utilities/TusDino-Chrome-Dino-Mod-Menu/blob/main/skins/mario.png?raw=true" , minecraft: "https://github.com/Case-Clicker-2-Utilities/TusDino-Chrome-Dino-Mod-Menu/blob/main/skins/minecraft.png?raw=true" , naruto: "https://github.com/Case-Clicker-2-Utilities/TusDino-Chrome-Dino-Mod-Menu/blob/main/skins/naruto%20colored.png?raw=true" , noface: "https://github.com/Case-Clicker-2-Utilities/TusDino-Chrome-Dino-Mod-Menu/blob/main/skins/noface%20halloween.png?raw=true" , nyancat: "https://github.com/Case-Clicker-2-Utilities/TusDino-Chrome-Dino-Mod-Menu/blob/main/skins/nyan%20cat.png?raw=true" , pikachu: "https://github.com/Case-Clicker-2-Utilities/TusDino-Chrome-Dino-Mod-Menu/blob/main/skins/pikachu.png?raw=true" , santa: "https://github.com/Case-Clicker-2-Utilities/TusDino-Chrome-Dino-Mod-Menu/blob/main/skins/santa%20colored.png?raw=true" , soniccol2: "https://github.com/Case-Clicker-2-Utilities/TusDino-Chrome-Dino-Mod-Menu/blob/main/skins/sonic%20colored%202.png?raw=true" , soniccol: "https://github.com/Case-Clicker-2-Utilities/TusDino-Chrome-Dino-Mod-Menu/blob/main/skins/sonic%20colored.png?raw=true" , sonic: "https://github.com/Case-Clicker-2-Utilities/TusDino-Chrome-Dino-Mod-Menu/blob/main/skins/sonic.png?raw=true" , }; function setSki(i) { setSkin(skins[i]); } tusdino.onclick("setskin", function () { var inp = document.getElementById("setskincheatselect").value; setSki(inp); var jsf = false; for (var i in document.querySelector("#setskincheatselect").children) { if ( document.querySelector("#setskincheatselect").children[i].value == document.querySelector("#setskincheatselect").value ) { jsf = document.querySelector("#setskincheatselect").children[i] .innerText; } } if (jsf) { tusdino.msg("Set skin to " + jsf + " [NOTE: SKINS MIGHT BE BUGGY]"); } }); tusdino.onclick("noclip", function () { tusdino.cheats.noclip = !tusdino.cheats.noclip; if (tusdino.cheats.noclip) { document.getElementById("noclip").innerText = "No Clip - ON "; tusdino.msg("Enabled No-Clip"); } else { document.getElementById("noclip").innerText = "No Clip - OFF"; tusdino.msg("Disabled No-Clip"); } }); tusdino.onclick("autocontinuedeath", function () { tusdino.cheats.autoContinueDeath = !tusdino.cheats.autoContinueDeath; if (tusdino.cheats.autoContinueDeath) { document.getElementById("autocontinuedeath").innerText = "Auto Continue Death - ON "; tusdino.msg("Enabled Auto Continue Death"); } else { document.getElementById("autocontinuedeath").innerText = "Auto Continue Death - OFF"; tusdino.msg("Disabled Auto Continue Death"); } }); tusdino.onclick("continuedeath", function () { if (tusdino.modules.isDead) { Runner.instance_.horizon.obstacles=[]; Runner.instance_.setSpeed(Runner.instance_.config.SPEED); Runner.instance_.activated = true; Runner.instance_.crashed = false; Runner.instance_.tRex.reset(); Runner.instance_.tRex.startJump(0.5); tusdino.modules.isDead = false; tusdino.msg("Continued Death and cleared nearby obstacles"); } else { tusdino.msg("Unable to continue death, the Trex has to be dead"); } }); var blockyjump = false; tusdino.onclick("blockyjump", function () { blockyjump = !blockyjump; if (blockyjump) { Runner.instance_.tRex.config.DROP_VELOCITY = 2; document.getElementById("blockyjump").innerText = "Blocky Jump - ON "; tusdino.msg("Enabled Blocky Jump"); } else { Runner.instance_.tRex.config.DROP_VELOCITY = -5; document.getElementById("blockyjump").innerText = "Blocky Jump - OFF"; tusdino.msg("Disabled Blocky Jump"); } }); var highjump = false; tusdino.onclick("highjump", function () { highjump = !highjump; if (highjump) { Runner.instance_.tRex.setJumpVelocity(14); document.getElementById("highjump").innerText = "High Jump - ON "; tusdino.msg("Enabled High Jump"); } else { Runner.instance_.tRex.setJumpVelocity(10); document.getElementById("highjump").innerText = "High Jump - OFF"; tusdino.msg("Disabled High Jump"); } }); var pausegame = false; tusdino.onclick("pausegame", function () { pausegame = !pausegame; if (pausegame) { Runner.instance_.stop(); document.getElementById("pausegame").innerText = "Pause - ON "; tusdino.msg("Enabled Pause"); } else { Runner.instance_.play(); document.getElementById("pausegame").innerText = "Pause - OFF"; tusdino.msg("Disabled Pause"); } }); tusdino.onclick("forcepausegame", function () { tusdino.cheats.forcepause = !tusdino.cheats.forcepause; if (tusdino.cheats.forcepause) { document.getElementById("forcepausegame").innerText = "Force Pause - ON "; tusdino.msg("Enabled Force Pause"); } else { Runner.instance_.play(); document.getElementById("forcepausegame").innerText = "Force Pause - OFF"; tusdino.msg("Disabled Force Pause"); } }); tusdino.onclick("restartgame", function () { var n = Runner.instance_.gameOver; Runner.instance_.gameOver = tusdino.hacked.saveGameOver; Runner.instance_.gameOver(); Runner.instance_.restart(); Runner.instance_.gameOver = n; tusdino.msg("Restarted the game"); }); tusdino.onclick("mutegame", function () { tusdino.cheats.mute = !tusdino.cheats.mute; if (tusdino.cheats.mute) { document.getElementById("mutegame").innerText = "Mute Game - ON "; tusdino.msg("Enabled Mute"); } else { document.getElementById("mutegame").innerText = "Mute Game - OFF"; tusdino.msg("Disabled Mute"); } }); tusdino.onclick("rainbowsquareplayer", function () { tusdino.cheats.rainbowSquarePlayer = !tusdino.cheats.rainbowSquarePlayer; if (tusdino.cheats.rainbowSquarePlayer) { document.getElementById("rainbowsquareplayer").innerText = "Rainbow Square Player - ON "; tusdino.msg("Enabled Rainbow Square Player"); } else { hslStart = false; document.getElementById("rainbowsquareplayer").innerText = "Rainbow Square Player - OFF"; tusdino.msg("Disabled Rainbow Square Player"); } }); var rainbowbackground = false; var oldtrans = document.body.transition; var oldbg = document.body.background; function flash() { if (rainbowbackground) { document.body.style.transition = "2s ease 0s"; document.body.style.background = "red"; setTimeout(function () { if (rainbowbackground) { document.body.style.background = "red"; } }, 1000); setTimeout(function () { if (rainbowbackground) { document.body.style.background = "orange"; } }, 2000); setTimeout(function () { if (rainbowbackground) { document.body.style.background = "yellow"; } }, 3000); setTimeout(function () { if (rainbowbackground) { document.body.style.background = "white"; } }, 4000); setTimeout(function () { if (rainbowbackground) { document.body.style.background = "green"; } }, 5000); setTimeout(function () { if (rainbowbackground) { document.body.style.background = "blue"; } }, 6000); setTimeout(function () { if (rainbowbackground) { document.body.style.background = "darkblue"; } }, 7000); setTimeout(function () { if (rainbowbackground) { document.body.style.background = "black"; } }, 8000); setTimeout(function () { if (rainbowbackground) { document.body.style.background = "red"; } }, 9000); setTimeout(function () { if (rainbowbackground) { flash(); } }, 9000); } } tusdino.onclick("rainbowbackground", function () { rainbowbackground = !rainbowbackground; if (rainbowbackground) { flash(); document.getElementById("rainbowbackground").innerText = "Rainbow Background - ON "; tusdino.msg("Enabled Rainbow Background"); } else { window.oldbg = oldbg; document.body.style.background = oldbg; document.body.style.transition = oldtrans; document.getElementById("rainbowbackground").innerText = "Rainbow Background - OFF"; tusdino.msg("Disabled Rainbow Background"); } }); var fastfall = false; Runner.instance_.tRex.startJump = function (speed) { if (this.airjump) { this.jumping = false; if (!this.jumping) { this.update(0, "JUMPING"); // Tweak the jump velocity based on the speed. this.jumpVelocity = this.config.INIITAL_JUMP_VELOCITY - speed / 10; this.jumping = true; this.reachedMinHeight = false; this.speedDrop = false; } } else { this.jumping = false; if (!this.jumping) { this.update(0, "JUMPING"); // Tweak the jump velocity based on the speed. this.jumpVelocity = this.config.INIITAL_JUMP_VELOCITY - speed / 10; this.jumping = true; this.reachedMinHeight = false; this.speedDrop = false; } } }; tusdino.onclick("fastfall", function () { fastfall = !fastfall; if (fastfall) { Runner.instance_.tRex.config.DROP_VELOCITY = 12; document.getElementById("fastfall").innerText = "Fast Fall - ON "; tusdino.msg("Enabled Fast Fall"); } else { Runner.instance_.tRex.config.DROP_VELOCITY = -5; document.getElementById("fastfall").innerText = "Fast Fall - OFF"; tusdino.msg("Disabled Fast Fall"); } }); var IS_HIDPI = window.devicePixelRatio > 1; /** @const */ var IS_IOS = window.navigator.userAgent.indexOf("CriOS") > -1 || window.navigator.userAgent == "UIWebViewForStaticFileContent"; /** @const */ var IS_MOBILE = window.navigator.userAgent.indexOf("Mobi") > -1 || IS_IOS; /** @const */ var IS_TOUCH_ENABLED = "ontouchstart" in window; Runner.instance_.onKeyDown = function (e) { // Prevent native page scrolling whilst tapping on mobile. if (IS_MOBILE) { e.preventDefault(); } // if (e.target != this.detailsButton) { if ( !this.crashed && (Runner.keycodes.JUMP[e.keyCode] || e.type == Runner.events.TOUCHSTART || e.type == Runner.events.GAMEPADCONNECTED) ) { if (!this.activated) { this.loadSounds(); this.activated = true; // errorPageController.trackEasterEgg(); } if ( (tusdino.cheats.airjump ? true : !this.tRex.jumping) && (tusdino.cheats.duckAndJump ? true : !this.tRex.ducking) ) { this.playSound(this.soundFx.BUTTON_PRESS); this.tRex.startJump(this.currentSpeed); } } if ( this.crashed && e.type == Runner.events.TOUCHSTART && e.currentTarget == this.containerEl ) { this.restart(); } // } if ( this.activated && !this.crashed && Runner.keycodes.DUCK[e.keyCode] ) { e.preventDefault(); if (this.tRex.jumping) { // Speed drop, activated only when jump key is not pressed. this.tRex.setSpeedDrop(); } else if (!this.tRex.ducking) { // Duck. this.tRex.setDuck(true); } } }; tusdino.onclick("airjump", function () { tusdino.cheats.airjump = !tusdino.cheats.airjump; if (tusdino.cheats.airjump) { document.getElementById("airjump").innerText = "Airjump - ON "; tusdino.msg("Enabled Airjump"); } else { document.getElementById("airjump").innerText = "Airjump - OFF"; tusdino.msg("Disabled Airjump"); } }); tusdino.onclick("autoplayer", function () { tusdino.cheats.autoplayer = !tusdino.cheats.autoplayer; if (tusdino.cheats.autoplayer) { document.getElementById("autoplayer").innerText = "Autoplayer - ON "; tusdino.msg("Enabled Autoplayer"); } else { document.getElementById("autoplayer").innerText = "Autoplayer - OFF"; tusdino.msg("Disabled Autoplayer"); } }); tusdino.onclick("autofocus", function () { tusdino.cheats.autofocus = !tusdino.cheats.autofocus; if (tusdino.cheats.autofocus) { document.getElementById("autofocus").innerText = "Auto Focus - ON "; tusdino.msg("Enabled Auto Focus"); } else { document.getElementById("autofocus").innerText = "Auto Focus - OFF"; tusdino.msg("Disabled Auto Focus"); } }); tusdino.onclick("forcefocus", function () { tusdino.cheats.forcefocus = !tusdino.cheats.forcefocus; if (tusdino.cheats.forcefocus) { document.getElementById("forcefocus").innerText = "Force Focus - ON "; tusdino.msg("Enabled Force Focus"); } else { document.getElementById("forcefocus").innerText = "Force Focus - OFF"; tusdino.msg("Disabled Force Focus"); } }); tusdino.onclick("jumpnotifier", function () { tusdino.cheats.notifier = !tusdino.cheats.notifier; if (tusdino.cheats.notifier) { document.getElementById("jumpnotifier").innerText = "Jump Notifier - ON "; tusdino.msg("Enabled Jump Notifier"); } else { document.getElementById("jumpnotifier").innerText = "Jump Notifier - OFF"; tusdino.msg("Disabled Jump Notifier"); } }); tusdino.onclick("walk", function () { tusdino.cheats.walk = !tusdino.cheats.walk; if (tusdino.cheats.walk) { document.getElementById("walk").innerText = "Walk - ON "; tusdino.msg("Enabled Walk"); } else { x = Runner.instance_.tRex.xPos; document.getElementById("walk").innerText = "Walk - OFF"; tusdino.msg("Disabled Walk"); } }); tusdino.onclick("obstacleesp", function () { tusdino.cheats.objectEsp = !tusdino.cheats.objectEsp; if (tusdino.cheats.objectEsp) { document.getElementById("obstacleesp").innerText = "Obstacle ESP - ON "; tusdino.msg("Enabled Obstacle ESP"); } else { document.getElementById("obstacleesp").innerText = "Obstacle ESP - OFF"; tusdino.msg("Disabled Obstacle ESP"); } }); tusdino.onclick("tracers", function () { tusdino.cheats.tracer = !tusdino.cheats.tracer; if (tusdino.cheats.tracer) { document.getElementById("tracers").innerText = "Tracers - ON "; tusdino.msg("Enabled Tracers"); } else { hslStart = false; document.getElementById("tracers").innerText = "Tracers - OFF"; tusdino.msg("Disabled Tracers"); } }); tusdino.onclick("lazervisonkey", function () { tusdino.cheats.lazerv = !tusdino.cheats.lazerv; if (tusdino.cheats.lazerv) { document.getElementById("lazervisonkey").innerText = "Lazer Vison Key (L) - ON "; tusdino.msg("Enabled Lazer Vison Key"); } else { hslStart = false; document.getElementById("lazervisonkey").innerText = "Lazer Vison Key (L) - OFF"; tusdino.msg("Disabled Lazer Vison Key"); } }); tusdino.onclick("lazervison", function () { tusdino.cheats.lazervisual = true; tusdino.cheats.lazer = true; setTimeout(() => { tusdino.cheats.lazervisual = false; laz = false; }, 50); tusdino.msg("Shot a lazer"); }); tusdino.onclick("esp", function () { tusdino.cheats.esp = !tusdino.cheats.esp; if (tusdino.cheats.esp) { document.getElementById("esp").innerText = "ESP - ON "; tusdino.msg("Enabled ESP"); } else { document.getElementById("esp").innerText = "ESP - OFF"; tusdino.msg("Disabled ESP"); } }); tusdino.onclick("fly", function () { tusdino.cheats.fly = !tusdino.cheats.fly; if (tusdino.cheats.fly) { y = Runner.instance_.tRex.yPos; x = Runner.instance_.tRex.xPos; document.getElementById("fly").innerText = "Fly - ON "; tusdino.msg("Enabled Fly"); } else { tt = true; Runner.instance_.tRex.startJump(0.5); y = 96; document.getElementById("fly").innerText = "Fly - OFF"; tusdino.msg("Disabled Fly"); } }); tusdino.onclick("stormcloud", function () { tusdino.cheats.stormcloud = !tusdino.cheats.stormcloud; if (tusdino.cheats.stormcloud) { document.getElementById("stormcloud").innerText = "Storm Cloud - ON "; tusdino.msg("Enabled Storm Cloud"); } else { document.getElementById("stormcloud").innerText = "Storm Cloud - OFF"; tusdino.msg("Disabled Storm Cloud"); } }); tusdino.onclick("noobstacle", function () { tusdino.cheats.noobstacles = !tusdino.cheats.noobstacles; if (tusdino.cheats.noobstacles) { document.getElementById("noobstacle").innerText = "No Obstacle - ON "; tusdino.msg("Enabled No Obstacle"); } else { Runner.instance_.horizon.spritePos.CACTUS_LARGE = tusdino.saved.CACTUS_LARGE; Runner.instance_.horizon.spritePos.CACTUS_SMALL = tusdino.saved.CACTUS_SMALL; Runner.instance_.horizon.spritePos.PTERODACTYL = tusdino.saved.PTERODACTYL; document.getElementById("noobstacle").innerText = "No Obstacle - OFF"; tusdino.msg("Disabled No Obstacle"); } }); var oldGrav = Runner.instance_.tRex.config.GRAVITY; var oldinjumpvel = Runner.config.INITIAL_JUMP_VELOCITY; tusdino.onclick("glide", function () { tusdino.cheats.glide = !tusdino.cheats.glide; if (tusdino.cheats.glide) { Runner.instance_.tRex.config.GRAVITY = 0; Runner.instance_.updateConfigSetting("INITIAL_JUMP_VELOCITY", 0.39); document.getElementById("glide").innerText = "Glide - ON "; tusdino.msg("Enabled Glide"); } else { Runner.instance_.tRex.config.GRAVITY = oldGrav; Runner.instance_.updateConfigSetting( "INITIAL_JUMP_VELOCITY" , oldinjumpvel ); document.getElementById("glide").innerText = "Glide - OFF"; tusdino.msg("Disabled Glide"); } }); tusdino.onclick("obliterate", function () { tusdino.cheats.obliterate = !tusdino.cheats.obliterate; if (tusdino.cheats.obliterate) { document.getElementById("obliterate").innerText = "Obliterate Obstacles - ON "; tusdino.msg("Enabled Obliterate Obstacles"); } else { document.getElementById("obliterate").innerText = "Obliterate Obstacles - OFF"; tusdino.msg("Disabled Obliterate Obstacles"); } }); tusdino.onclick("invisibilitycheat", function () { tusdino.cheats.invisibility = !tusdino.cheats.invisibility; if (tusdino.cheats.invisibility) { document.getElementById("invisibilitycheat").innerText = "Invisibility - ON "; tusdino.msg("Enabled Invisibility"); } else { Runner.instance_.tRex.spritePos = { x: 677 , y: 2 , }; document.getElementById("invisibilitycheat").innerText = "Invisibility - OFF"; tusdino.msg("Disabled Invisibility"); } }); tusdino.onclick("instantrespawn", function () { tusdino.cheats.instantrespawn = !tusdino.cheats.instantrespawn; if (tusdino.cheats.instantrespawn) { document.getElementById("instantrespawn").innerText = "Instant Respawn - ON "; tusdino.msg("Enabled Instant Respawn"); } else { document.getElementById("instantrespawn").innerText = "Instant Respawn - OFF"; tusdino.msg("Disabled Instant Respawn"); } }); tusdino.onclick("obstacleBypass", function () { tusdino.cheats.obstacleBypass = !tusdino.cheats.obstacleBypass; if (tusdino.cheats.obstacleBypass) { document.getElementById("obstacleBypass").innerText = "Obstacle Bypass - ON "; tusdino.msg("Enabled Obstacle Bypass"); } else { Runner.instance_.tRex.spritePos = { x: 677 , y: 2 , }; document.getElementById("obstacleBypass").innerText = "Obstacle Bypass - OFF"; tusdino.msg("Disabled Obstacle Bypass"); } }); tusdino.onclick("duckAndJump", function () { tusdino.cheats.duckAndJump = !tusdino.cheats.duckAndJump; if (tusdino.cheats.duckAndJump) { document.getElementById("duckAndJump").innerText = "Duck and Jump - ON "; tusdino.msg("Enabled Duck and Jump"); } else { document.getElementById("duckAndJump").innerText = "Duck and Jump - OFF"; tusdino.msg("Disabled Duck and Jump"); } }); tusdino.onclick("playingIntro", function () { Runner.instance_.playingIntro = !Runner.instance_.playingIntro; if (Runner.instance_.playingIntro) { document.getElementById("playingIntro").innerText = "Playing Intro - ON "; tusdino.msg("Enabled Playing Intro"); } else { document.getElementById("playingIntro").innerText = "Playing Intro - OFF"; tusdino.msg("Disabled Playing Intro"); } }); tusdino.onclick("watermark", function () { tusdino.cheats.watermark = !tusdino.cheats.watermark; if (tusdino.cheats.watermark) { document.getElementById("watermark").innerText = "Watermark - ON "; tusdino.msg("Enabled Watermark"); } else { document.getElementById("watermark").innerText = "Watermark - OFF"; tusdino.msg("Disabled Watermark"); } }); tusdino.onclick("obstacleFloat", function () { tusdino.cheats.obstacleFloat = !tusdino.cheats.obstacleFloat; if (tusdino.cheats.obstacleFloat) { document.getElementById("obstacleFloat").innerText = "Obstacle Float - ON "; tusdino.msg("Enabled Obstacle Float"); } else { document.getElementById("obstacleFloat").innerText = "Obstacle Float - OFF"; tusdino.msg("Disabled Obstacle Float"); } }); tusdino.onclick("arc", function () { tusdino.cheats.arc = !tusdino.cheats.arc; if (tusdino.cheats.arc) { document.getElementById("arc").innerText = "Arc - ON "; tusdino.msg("Enabled Arc"); } else { document.getElementById("arc").innerText = "Arc - OFF"; tusdino.msg("Disabled Arc"); } }); tusdino.onclick("rainbowglow", function () { tusdino.cheats.rainbowglow = !tusdino.cheats.rainbowglow; if (tusdino.cheats.rainbowglow) { document.getElementById("rainbowglow").innerText = "Rainbow Glow - ON "; tusdino.msg("Enabled Rainbow Glow"); } else { document.getElementById("rainbowglow").innerText = "Rainbow Glow - OFF"; tusdino.msg("Disabled Rainbow Glow"); } }); var darkmodeg = darkMode; var oldBg = ''; var oldInv = ''; var oldCol = ''; function execDarkmode() { var d = document.createElement('style'); d.innerHTML = ` h1 { color: white; } h2 { color: white; } h3 { color: white; } p { color: white } `; d.id="darkmodestyle"; document.body.append(d); oldBg = document.body.style.background; oldCol = document.body.style.color; oldInv = document.getElementsByClassName('runner-canvas')[0].style.filter; document.body.style.color = 'white'; document.getElementsByClassName('runner-canvas')[0].style.filter = 'invert(1)'; document.body.style.background = "rgb(32 33 36)"; document.getElementById("toggledarkmode").innerText = "Dark Game Mode - ON "; } if (darkmodeg) { execDarkmode(); } tusdino.onclick("toggledarkmode", function () { darkmodeg = !darkmodeg; if (darkmodeg) { execDarkmode(); tusdino.msg("Enabled Dark Mode"); } else { document.getElementById('darkmodestyle').remove(); document.getElementsByClassName('runner-canvas')[0].style.filter = oldInv; document.body.style.background = oldBg; document.body.style.color = oldCol; document.getElementById("toggledarkmode").innerText = "Dark Game Mode - OFF"; tusdino.msg("Disabled Dark Mode"); } }); tusdino.onclick("glow", function () { tusdino.cheats.glow = !tusdino.cheats.glow; if (tusdino.cheats.glow) { document.getElementById("glow").innerText = "Glow - ON "; tusdino.msg("Enabled Glow"); } else { document.getElementById("glow").innerText = "Glow - OFF"; tusdino.msg("Disabled Glow"); } }); tusdino.onclick("bhop", function () { tusdino.cheats.bhop = !tusdino.cheats.bhop; if (tusdino.cheats.bhop) { document.getElementById("bhop").innerText = "Bhop - ON "; tusdino.msg("Enabled Bhop"); } else { document.getElementById("bhop").innerText = "Bhop - OFF"; tusdino.msg("Disabled Bhop"); } }); tusdino.onclick("tradingcredits", function () { tusdino.alert( " /color^#855dff^ TusDino/color-end /color^#CF9FFF^Credits/color-end" , "/color^dodgerblue^Lapide/color-end : /color^lightblue^Main Developer & Coder /color-end - /color^royalblue^ Developed modules & menu /color-end \n\n /color^dodgerblue^ links /color-end : url-www.youtube.com/channel/UCRA3KXViuDmsmfuP0RF45_w?sub_confirmation=1> Youtube <url url-github.com/nonumbershere> Github <url url-discord.gg/6eaDrx5J9s> Discord <url \n\n /color^dodgerblue^" ); }); tusdino.onclick("tradingwhatsnew", function () { tusdino.whatsnew(); }); tusdino.onclick("removeallcloud", function () { Runner.instance_.horizon.clouds = []; tusdino.msg("Removed all clouds"); }); tusdino.onclick("addcloud", function () { Runner.instance_.horizon.addCloud(); tusdino.msg("Added one cloud"); }); tusdino.onclick("setmenuscale", function () { const tradingmenuDiv = document.getElementById("tradingmenu"); const setmenuscaleinput = document.getElementById("setmenuscaleinput"); // active tusdino.alert if the value is more or less then the limits if (setmenuscaleinput.value > 1.2 || setmenuscaleinput.value < 0.7) { tusdino.alert( "Limits" , 'The limits for the menu scale <br> are from <label class="alertbox" style="color: #f02626;"> 0.7 </label> <label class="alertbox" style="color: lightblue;">to</label> <label class="alertbox" style="color: #f02626;">1.2</label> <br> sorry :(' ); } else { tradingmenuDiv.style.transform = "scale(" + setmenuscaleinput.value + ")"; } }); tusdino.onclick("setmenuopacity", function(){ const tradingmenuDiv = document.getElementById("tradingmenu"); var inp = parseFloat( document.getElementById("menuopacityinput").value ); console.log(inp); if (!isNaN(inp)) { if (inp < 1 || inp > 0.2) { tradingmenuDiv.style.opacity = inp; } else { tusdino.alert( " /color^#855dff^ Menu /color-end /color^#cf9fff^Opacity/color-end /color^#f02626^Limits/color-end" , 'The max opacity for the menu is 1 and the least you can go is 0.2' ); } } }) tusdino.onclick("removecloud", function () { Runner.instance_.horizon.clouds.length > 0 ? (Runner.instance_.horizon.clouds = Runner.instance_.horizon.clouds.slice( 0 , Runner.instance_.horizon.clouds.length - 1 )) : ""; tusdino.msg("Removed one cloud"); }); tusdino.onclick("removeallobstacle", function () { Runner.instance_.horizon.obstacles = []; tusdino.msg("Removed all obstacles"); }); tusdino.onclick("addobstacle", function () { Runner.instance_.horizon.addNewObstacle(Runner.instance_.currentSpeed); tusdino.msg("Added one obstacle"); }); tusdino.onclick("removeobstacle", function () { Runner.instance_.horizon.obstacles.length > 0 ? (Runner.instance_.horizon.obstacles = Runner.instance_.horizon.obstacles.slice( 1 , Runner.instance_.horizon.obstacles.length )) : ""; tusdino.msg("Removed one obstacle"); }); tusdino.logs.success("Successfully loaded " + atob("VHVzRGlubw==") + "!"); } else { alert( "TUSDINO ERROR: We cannot find the Runner object, try using a VPN.\n\nIf you don't know any free ones, here's some (Chrome Only):\nZenMate - https://chrome.google.com/webstore/detail/free-vpn-zenmate-best-vpn/fdcgdnkidjaadafnichfpabhfomcebme\n - https://chrome.google.com/webstore/detail/touch-vpn-secure-and-unli/bihmplhobchoageeokmgbdihknkjbknd/related\n\n\n----------------------\nThese free VPN's are secure and trusted by millions of people." ); } } setTimeout(() => { // Detects if Runner exists when the script has loaded. If not, it will wait for the page to load. if (typeof Runner != typeof undefined) { cont(); } else { window.addEventListener("load", function () { cont(); }); } }, 500); // Code to run when page loaded window.addEventListener("load", function () { // Just for the auto focus module setTimeout(() => { window.addEventListener("blur", function () { if (tusdino.cheats.autofocus) { console.log("Auto focusing on website"); var focusevent = new Event("focus"); window.dispatchEvent(focusevent); } }); }, 2000); }); } })();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址