- // ==UserScript==
- // @name fsploit debug - deeeep.io
- // @namespace http://tampermonkey.net/
- // @version 5.1.0-debug
- // @description best deeeep.io cheat ever
- // @run-at document-start
- // @author mahdi1337, noam01, .pi3141
- // @match https://*.deeeep.io/*
- // @icon https://beta.deeeep.io/favicon-32x32.png
- // @grant GM_setValue
- // @grant GM_getValue
- // ==/UserScript==
-
- // Search for "TODO:" to see what needs to be done
- // Check those first in the case that the script breaks
-
- "use strict";
-
- const fsploitVersion = "5.1.3";
- const knownClientVersion = "9fcb82c9,e40a671d";
-
- const currentScript = GM_getValue("mainModule");
-
- if (!GM_getValue("logo")) {
- fetch("https://raw.githubusercontent.com/mahdi13377/fsploit-public/main/logo-base64")
- .then((response) => response.text())
- .then((data) => {
- const loadingCover = document.createElement("div");
- loadingCover.id = "loadingCover";
- loadingCover.style.cssText =
- "position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: rgb(30, 30, 30); z-index: 9999; opacity: 1; transition: opacity 0.5s ease-out; display: flex; justify-content: center; align-items: center;";
- const logoImage = document.createElement("img");
- logoImage.style.cssText = "max-width: 80%; max-height: 80%;";
- logoImage.src = `data:image/png;base64,${data}`;
- loadingCover.appendChild(logoImage);
- document.documentElement.appendChild(loadingCover);
- setTimeout(() => {
- loadingCover.style.opacity = "0";
- }, 1000);
- setTimeout(() => {
- loadingCover.remove();
- }, 1550);
- GM_setValue("logo", data.trim());
- });
- } else {
- const logoData = GM_getValue("logo");
- const loadingCover = document.createElement("div");
- loadingCover.id = "loadingCover";
- loadingCover.style.cssText =
- "position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: rgb(30, 30, 30); z-index: 9999; opacity: 1; transition: opacity 0.5s ease-out; display: flex; justify-content: center; align-items: center;";
- const logoImage = document.createElement("img");
- logoImage.style.cssText = "max-width: 80%; max-height: 80%;";
- logoImage.src = `data:image/png;base64,${logoData}`;
- loadingCover.appendChild(logoImage);
- document.documentElement.appendChild(loadingCover);
- setTimeout(() => {
- loadingCover.style.opacity = "0";
- }, 1000);
- setTimeout(() => {
- loadingCover.remove();
- }, 1550);
- }
-
- // FSPLOIT
-
- let game;
- let gameState;
- let currentScene;
-
- let betterVisionx = false;
- let quickDisconnectx = false;
- let aimLinex = false;
- let clearChatx = false;
- let boostHacksx = false;
- let humpbackAutosongsx = false;
-
- // GAME UTILS
- const encodeBytePacket = (t, e, n = "") => {
- const silly = ["ode", "eat", "fr", "bite", "eng", "enc", "the", "code", "rep", "L", "en", "setter"];if (!t) return null;const a = ((A, B) => {const enc = new TextEncoder();const a = enc[silly[5] + silly[0]](A);const i = enc[silly[10] + silly[7]](B);const r = new Uint8Array(a[`l${silly[4]}${silly[6].slice(0, 2)}`]);for (let o = 0; o < a.length; o++) r[o] = a[o] ^ i[o % i[`${silly[9].toLowerCase()}${silly[10]}g${silly[6].slice(0, 2)}`]];return btoa(String.fromCharCode(...r));})(String.fromCharCode(e)[silly[8] + silly[1]](3) + n, t);const i = new TextEncoder()[silly[5] + silly[0]](a);const r = 1 + i.byteLength + 1;const o = new ArrayBuffer(r);const l = new DataView(o);l.setUint8(0, 25);new Uint8Array(o)[silly[11].slice(0, (0o11 / 0x1b) * 0b1001)](i, 1);l.setUint8(r - 1, e);return o;};
-
- const boostData = {
- 10: {
- hasSec: true,
- },
- 11: {
- hasSec: true,
- secLoadTime: 350,
- },
- 21: {
- hasSec: true,
- secLoadTime: 1000,
- },
- 22: {
- hasSec: true,
- secLoadTime: 600,
- },
- 25: {
- hasSec: true,
- secLoadTime: 350,
- },
- 27: {
- hasSec: true,
- secLoadTime: 350,
- },
- 34: {
- hasSec: true,
- secLoadTime: 350,
- },
- 38: {
- hasSec: true,
- secLoadTime: 750,
- },
- 40: {
- hasSec: true,
- secLoadTime: 1000,
- },
- 41: {
- hasSec: true,
- },
- 42: {
- hasSec: true,
- secLoadTime: 300,
- },
- 43: {
- hasSec: true,
- secLoadTime: 350,
- },
- 49: {
- hasSec: true,
- secLoadTime: 350,
- },
- 56: {
- hasSec: true,
- },
- 61: {
- hasSec: true,
- secLoadTime: 400,
- },
- 62: {
- hasSec: true,
- secLoadTime: 2000,
- },
- 68: {
- hasSec: true,
- },
- 70: {
- hasSec: true,
- secLoadTime: 250,
- },
- 71: {
- hasSec: true,
- secLoadTime: 350,
- },
- 73: {
- hasSec: true,
- secLoadTime: 1000,
- },
- 74: {
- hasSec: true,
- },
- 76: {
- hasSec: true,
- secLoadTime: 200,
- },
- 80: {
- hasSec: true,
- secLoadTime: 350,
- },
- 82: {
- hasSec: true,
- secLoadTime: 1500,
- hasScaling: true,
- },
- 83: {
- hasSec: true,
- },
- 86: {
- hasSec: true,
- secLoadTime: 1000,
- },
- 87: {
- hasSec: true,
- secLoadTime: 150,
- },
- 90: {
- hasSec: true,
- },
- 91: {
- hasSec: true,
- secLoadTime: 800,
- },
- 92: {
- hasSec: true,
- secLoadTime: 300,
- },
- 93: {
- hasSec: true,
- secLoadTime: 750,
- },
- 94: {
- hasSec: true,
- },
- 95: {
- hasSec: true,
- },
- 96: {
- hasSec: true,
- secLoadTime: 750,
- },
- 97: {
- hasSec: true,
- hasWalking: true,
- },
- 98: {
- hasSec: true,
- },
- 99: {
- hasSec: true,
- secLoadTime: 400,
- },
- 100: {
- hasSec: true,
- secLoadTime: 750,
- },
- 101: {
- hasSec: true,
- secLoadTime: 750,
- },
- 102: {
- hasSec: true,
- secLoadTime: 1000,
- hasScaling: true,
- },
- 103: {
- hasSec: true,
- hasWalking: true,
- },
- 105: {
- hasSec: true,
- hasScaling: true,
- hasWalking: true,
- },
- 106: {
- hasSec: true,
- },
- 107: {
- hasSec: true,
- secLoadTime: 750,
- hasScaling: true,
- },
- 108: {
- hasSec: true,
- },
- 109: {
- hasSec: true,
- secLoadTime: 600,
- },
- 110: {
- hasSec: true,
- },
- 111: {
- hasSec: true,
- secLoadTime: 600,
- },
- 112: {
- hasSec: true,
- },
- 113: {
- hasSec: true,
- hasWalking: true,
- },
- 114: {
- hasSec: true,
- secLoadTime: 300,
- },
- 115: {
- hasSec: true,
- },
- 116: {
- hasSec: true,
- },
- 117: {
- hasSec: true,
- secLoadTime: 600,
- },
- 119: {
- hasSec: true,
- secLoadTime: 250,
- },
- 120: {
- hasSec: true,
- },
- 121: {
- hasWalking: true,
- },
- 123: {
- hasSec: true,
- secLoadTime: 750,
- hasWalking: true,
- },
- 124: {
- hasSec: true,
- },
- 126: {
- hasSec: true,
- },
- 127: {
- hasSec: true,
- },
- default: {
- hasSec: false,
- secLoadTime: 500,
- hasWalking: false,
- walkingLoadTime: 250,
- hasScaling: false,
- },
- };
- const sendBoost = (type, time = "") => {
- game[obfuscatedNameTranslator.socketManager].sendBytePacket(encodeBytePacket(gameState.token, type, time));
- };
- const handleLongPress = (t) => {
- const Boost = 1;
- const SecondaryAbility = 4;
- const ScalingBoost = 5;
- try {
- const data = {
- ...boostData.default,
- ...(boostData[currentScene?.myAnimals?.[0]?.visibleFishLevel] || {}),
- };
- if (t < (currentScene?.myAnimals?.[0]?._standing ? 40 : 100)) {
- return sendBoost(Boost);
- }
- if (currentScene?.myAnimals?.[0]?._standing) {
- return sendBoost(ScalingBoost, t);
- }
- if (data.hasScaling) {
- return sendBoost(ScalingBoost, t);
- }
- if (data.hasSec) {
- return sendBoost(SecondaryAbility, t);
- }
- return sendBoost(Boost);
- } catch {}
- };
-
- // MISC UTILS
- const randInt = (min, max) => Math.floor(min + Math.random() * (max - min));
-
- // UI
-
- const ui = {
- message: {
- info: (message, options) => {
- return document.getElementById("app").__vue_app__._context.config.globalProperties.$message({
- message: message,
- ...options,
- });
- },
- success: (message, options) => {
- return document.getElementById("app").__vue_app__._context.config.globalProperties.$message.success({
- message: message,
- ...options,
- });
- },
- warning: (message, options) => {
- return document.getElementById("app").__vue_app__._context.config.globalProperties.$message.warning({
- message: message,
- ...options,
- });
- },
- error: (message, options) => {
- return document.getElementById("app").__vue_app__._context.config.globalProperties.$message.error({
- message: message,
- ...options,
- });
- },
- },
- confirm: ({ title, message, type, dangerouslyUseHTMLString, confirmButtonText, cancelButtonText, onConfirm, onCancel }) => {
- return document
- .getElementById("app")
- .__vue_app__._context.config.globalProperties.$msgbox({
- title: title || "fsploit",
- message: message || "",
- type: type || "",
- dangerouslyUseHTMLString: dangerouslyUseHTMLString || false,
- confirmButtonText: confirmButtonText || "OK",
- cancelButtonText: cancelButtonText || "Cancel",
- showCancelButton: true,
- showClose: false,
- })
- .then(onConfirm)
- .catch(onCancel);
- },
- alert: ({ title, message, type, dangerouslyUseHTMLString, dismissButtonText, onDismiss }) => {
- return document
- .getElementById("app")
- .__vue_app__._context.config.globalProperties.$msgbox({
- title: title || "FSploit",
- message: message || "",
- type: type || "",
- dangerouslyUseHTMLString: dangerouslyUseHTMLString || false,
- confirmButtonText: dismissButtonText || "OK",
- showCancelButton: false,
- showClose: false,
- })
- .then(onDismiss);
- },
-
- registerGameUiButton: ({ id, svgIcon, onClick }) => {
- gameUiButtons.push({ id, svgIcon, onClick });
- console.log(gameUiButtons);
- },
-
- nukeDOM: () => {
- const domObserver = new MutationObserver(() => {
- for (const child of document.querySelectorAll("#app > *")) {
- child.remove();
- }
- });
- domObserver.observe(document.querySelector("html"), { childList: true, subtree: true });
- },
- };
-
- // CUSTOM STYLES
-
- const applyStyles = () => {
- document.title = `fsploit ${fsploitVersion}`;
- for (const favicon of document.querySelectorAll("link[rel*='icon']")) {
- favicon.remove();
- }
- document.getElementsByTagName("head")[0].appendChild(
- Object.assign(document.createElement("link"), {
- href: "https://raw.githubusercontent.com/mahdi13377/deeeepio_api_wrapper/main/favicon.ico",
- rel: "shortcut icon",
- type: "image/x-icon",
- })
- );
- document.getElementsByTagName("head")[0].appendChild(
- Object.assign(document.createElement("link"), {
- href: "https://raw.githubusercontent.com/mahdi13377/deeeepio_api_wrapper/main/favicon.ico",
- rel: "icon",
- type: "image/x-icon",
- })
- );
- const customTheme = `
- img[src*="img/badges/"] {
- display: none;
- }
-
- .el-input__wrapper {
- background-color: rgba(17, 24, 39, 0) !important;
- }
-
- .el-input__inner {
- color: rgba(255, 255, 255, 1) !important;
- }
-
- * {
- text-decoration: none !important;
- }
-
- .dark .modal-content {
- background-color: #202020 !important;
- border-color: #3c3c3c !important;
- }
-
- .dark .forum-post-page .inner,
- .dark .profile .content {
- background-color: #2b2b2b !important;
- }
-
- .dark body .el-input__wrapper,
- .dark body .el-textarea__wrapper {
- background-color: rgba(17, 24, 39, 0) !important;
- border-color: rgba(55, 65, 81, 1) !important;
- color: rgba(255, 255, 255, 1) !important;
- }
-
- .dark .forum-page,
- .dark .social-modal .main .content,
- .dark .social-modal .main .sidebar--left {
- background-color: #2b2c2f !important;
- }
-
- .forum-page .inner .forum-posts .forum-post-summary {
- border-color: rgba(209, 213, 219, 1) !important;
- border-bottom-width: 1px !important;
- cursor: pointer !important;
- padding-top: 0.5rem !important;
- padding-left: 0.75rem !important;
- padding-right: 0.75rem !important;
- }
-
- .dark .forum-page .inner .forum-posts .forum-post-summary:hover {
- background-color: rgba(77, 77, 77, 0.1) !important;
- }
-
- .dark .forum-page .inner .forum-posts .forum-post-summary {
- border-color: rgb(64 68 72) !important;
- }
-
- .dark .social-modal .main .sidebar--left .tabs .tab.active {
- background-color: rgba(65, 65, 65, 0) !important;
- color: rgba(255, 255, 255, 1) !important;
- }
-
- .dark .friends-view .nav .button-container .nice-button.active {
- background-color: rgb(62 66 70) !important;
- color: rgba(255, 255, 255, 1) !important;
- }
-
- .all-friends .friends .friend:hover,
- .friend-requests .requests .request.is-new,
- .friend-requests .requests .request:hover {
- background-color: rgb(62 66 70) !important;
- border-radius: 10px !important;
- }
-
- .btn.square.el-button--mini {
- border-radius: 0.9rem !important;
- width: 2rem !important;
- height: 2rem !important;
- }
-
- .dark .animals-container .animals .animal {
- background-color: rgba(17, 24, 39, 0) !important;
- }
-
- .dark .skins-container .skins .skin {
- --tw-bg-opacity: 0!important;
- }
- .dark .emotes .emote {
- --tw-bg-opacity: 0!important;
- }
- .dark .pets .pet {
- --tw-bg-opacity: 0!important;
- }
-
- body .el-popover.el-popper.popover--dark {
- border-color: #3c3c3c!important;
- }
- .dark .leaderboard-popover-details .right .header {
- --tw-bg-opacity: 1!important;
- background-color: #2b2b2b!important
- }
-
- body .el-popover.el-popper.popover--dark {
- background-color: #2b2b2b!important
- }
-
- .el-col-xs-12 {
- display: block;
- max-width: 49%;
- flex: 0 0 50%
- }
-
- html.dark .el-select__popper .el-select-dropdown {
- --tw-bg-opacity: 1;
- background-color: #2b2b2b
- }
-
- html.dark .el-select__popper .el-select-dropdown {
- --tw-bg-opacity: 1;
- background-color: #2b2b2b
- }
-
- html.dark .el-select__popper .el-select-dropdown__item:focus,html.dark .el-select__popper .el-select-dropdown__item:not(.is-disabled):hover {
- --tw-bg-opacity: 1;
- background-color: #1f1f1f
- }
-
- html.dark .el-dropdown-menu__item:focus,html.dark .el-dropdown-menu__item:not(.is-disabled):hover {
- --tw-bg-opacity: 1;
- background-color: #1f1f1f
- }
-
- html.dark .el-popper__arrow::before {
- --tw-bg-opacity: 1;
- background-color: rgba(55,65,81,var(--tw-bg-opacity));
- background: #ffffff!important;
- border-color: #565656!important
- }
-
- html.dark .el-popper {
- --tw-bg-opacity: 1;
- background-color: #1f1f1f
- --tw-border-opacity: 1;
- border-color: #1f1f1f
- border-radius: .375rem;
- --tw-text-opacity: 1;
- }
-
- .dark .create-comment .nav-bar {
- --tw-bg-opacity: 1;
- background-color: #202121;
- }
-
- .el-textarea__inner {
- box-shadow: none!important;
- }
-
- .el-col.el-col-24.el-col-xs-12.is-guttered:nth-of-type(2) {
- background-color: rgba(32, 32, 33, 0.1);
- padding-right: 15px;
- padding-left: 5px;
- border-width: 1px;
- border-radius: 0.5rem;
- border-color: rgba(255, 255, 255, 0.1);
- }
-
- .dark body .el-textarea__inner {
- background-color: #1c1c1c!important;
-
- }
-
- .dark .leaderboard-popover-details .left {
- --tw-bg-opacity: 0!important;
- background-color: rgba(31,41,55,var(--tw-bg-opacity))!important;
- }
- .user-widget {
- border-bottom-right-radius: 1rem !important;
- display: -webkit-box !important;
- display: -ms-flexbox !important;
- display: -webkit-flex !important;
- display: flex !important;
- -webkit-box-orient: horizontal !important;
- -webkit-box-direction: normal !important;
- -ms-flex-direction: row !important;
- -webkit-flex-direction: row !important;
- flex-direction: row !important;
- -webkit-box-align: stretch !important;
- -ms-flex-align: stretch !important;
- -webkit-align-items: stretch !important;
- align-items: stretch !important;
- padding: 1rem !important;
- }
-
- /* Common styles for all buttons */
- .btn:not(.el-button--text) {
- border-bottom-width: 4px!important;
- background-color: rgba(27, 59, 67, 1) !important;
- border-color: rgba(1, 35, 46, 1) !important;
- color: rgba(255, 255, 255, 1) !important;
- }
-
- .btn:not(.el-button--text):hover {
- background-color: rgba(31, 41, 55, 1) !important;
- border-color: rgba(17, 24, 39, 1) !important;
- }
-
- .coins.pb-2 {
- background-color: rgba(0, 0, 0, 0) !important;
- border-color: rgba(0, 0, 0, 0) !important;
- }
-
- html.dark .el-dropdown-menu {
- background-color: #2b2b2b !important;
- }
-
- .el-popper.is-light .el-popper__arrow::before {
- opacity: 0 !important;
- }
-
- .el-dropdown-menu__item:not(.is-disabled):focus {
-
- color: rgba(255, 255, 255, 1) !important;
- }
-
- .el-dropdown-menu__item i {
- margin-right: 5px !important;
- }
-
- .user-widget .user__data .username {
- cursor: pointer !important;
- margin-right: 0.25rem !important;
- overflow: hidden !important;
- -o-text-overflow: ellipsis !important;
- text-overflow: ellipsis !important;
- max-width: 16rem !important;
- font-size: 1.1em !important;
- line-height: 1.2em !important;
- margin-left: 1.5rem !important;
- }
-
- .el-button.el-button--small.el-tooltip__trigger.btn.nice-button.yellow.has-icon.square.only-icon.el-tooltip__trigger {
- display: none !important;
- }
-
- .el-image:nth-of-type(2).el-image__inner {
- content: url("https://i.ibb.co/84gjfCt/image-4.png") !important;
- }
-
- .divider {
- display: none !important;
- }
-
- .btn {
- outline: 2px solid transparent !important;
- }
-
- .home-page .header .left {
- background-color: rgba(17,24,39, 0.4)!important;
- }
-
- .top-right-nav {
- background-color: rgba(17,24,39, 0.4)!important;
- }
-
- div.sidebar.left > div.ad-block {
- opacity: 0 !important;
- pointer-events: none !important;
- display: none !important;
- }
- div.sidebar.left > a {
- display: none !important;
- }
- div.sidebar.left {
- max-width: 30vw;
- width: 21rem;
- bottom: 0 !important;
- }
- .dark .profile .content[data-v-60d99b2d] {
- --tw-bg-opacity: 0.5!important;
- background-color: #242424!important;
- backdrop-filter: blur(10px)!important;
- border-radius: 8px!important;
- border: 1px solid rgba(255, 255, 255, 0.1)!important;
- }
-
- .el-button {
- transition: .3s!important;
- }
- `;
- document.body.appendChild(Object.assign(document.createElement("style"), { innerHTML: customTheme }));
-
- const versionText = document.querySelector(".client-version");
- versionText.innerHTML = `<p>fsploit v${fsploitVersion}</p><p>Vast Softworks LLC.</p>`;
- versionText.style.display = "flex";
- versionText.style.justifyContent = "space-between";
- versionText.style.left = ".25rem";
-
- if (!GM_getValue("background")) {
- fetch("https://raw.githubusercontent.com/mahdi13377/fsploit-public/main/background-base64")
- .then((response) => response.text())
- .then((data) => {
- document.body.appendChild(
- Object.assign(document.createElement("style"), {
- innerHTML: `.home-bg {background-image: url('data:image/png;base64,${data.trim()}') !important;}`,
- })
- );
- GM_setValue("background", data.trim());
- });
- } else {
- const backgroundData = GM_getValue("background");
- document.body.appendChild(
- Object.assign(document.createElement("style"), {
- innerHTML: `.home-bg {background-image: url('data:image/png;base64,${backgroundData}') !important;}`,
- })
- );
- }
-
- if (!GM_getValue("banner")) {
- fetch("https://raw.githubusercontent.com/mahdi13377/fsploit-public/main/banner-base64")
- .then((response) => response.text())
- .then((data) => {
- document.body.appendChild(
- Object.assign(document.createElement("style"), {
- innerHTML: `.play-game img {opacity: 0 !important;} .play-game > div:first-of-type {background-image: url('data:image/png;base64,${data.trim()}') !important; background-size: contain !important; background-repeat: no-repeat !important; background-position: center !important;}`,
- })
- );
- GM_setValue("banner", data.trim());
- });
- } else {
- const bannerData = GM_getValue("banner");
- document.body.appendChild(
- Object.assign(document.createElement("style"), {
- innerHTML: `.play-game img {opacity: 0 !important;} .play-game > div:first-of-type {background-image: url('data:image/png;base64,${bannerData}') !important; background-size: contain !important; background-repeat: no-repeat !important; background-position: center !important;}`,
- })
- );
- }
- document.querySelector(".play-game img").setAttribute("draggable", "false");
-
- const left_widget_container = document.querySelector("div.sidebar.left");
-
- const tutorial_box = document.querySelector("div.sidebar.right > div:nth-child(3)").cloneNode(true);
- tutorial_box.setAttribute("id", "tutorial-box");
- left_widget_container.appendChild(tutorial_box);
-
- document.querySelector("#tutorial-box > div.title").innerText = "How to play";
- document.querySelector("#tutorial-box > div:nth-child(2)").outerHTML = '<div id="tutorial"></div>';
-
- const tutorial = document.getElementById("tutorial");
- tutorial.style.maxHeight = "30vh";
- tutorial.style.overflow = "scroll";
- tutorial.style.overflowX = "hidden";
- tutorial.style.padding = "10px";
- tutorial.style.fontSize = "small";
-
- const tut = `<b>Welcome to fsploit!</b>
- <p>Scroll down for instructions on hacks</p>
- <br />
- <b>Controls</b>
- <p><b>ESC</b> to hide/show menu</p>
- <p><b>Hold CTRL</b> to see an aim line (only on certain animals)</p>
- <p><b>Scroll</b> with your mouse to zoom in and out of the map. This client allows you to do so without limit.</p>
- <p><b>M</b> to hide/show chat messages</p>
- <p><b>B</b> to clear chat messages</p>
- <p><b>N</b> to hide/show large map</p>
- <p><b>Y</b> to view the evolution tree</p>
- <p><b>S</b> to open settings</p>
-
- <br />
- <hr />
- <br />
-
- <b>Boost hacks</b>
- <p>Hold <b>CTRL</b> and <b>CLICK</b> to use a long charged boost</p>
- <p>Hold <b>ALT</b> and <b>CLICK</b> to use a short charged boost</p>
- <p>Hold <b>CTRL</b>, <b>SHIFT</b>, and <b>CLICK</b> to use a special charged boost:</p>
- <ul>
- <li>Walking animals: jump higher than normal</li>
- <li>Beluga and beaked whale: shoot super speed projectile (uses 2 boosts)</li>
- <li>Thresher: go nyoom (uses 2 boosts)</li>
- </ul>
-
- <b>Goblin shark 210 dmg</b>
- <p>It is possible to glitch goblin shark's charged shot mechanism and fire bullets that deal 210 damage without having to charge for 2 seconds.</p>
- <p>Steps:</p>
- <ol>
- <li>Charge boost to max. Make sure you reach the -50% speed.</li>
- <li>Cancel the charge boost by right clicking.</li>
- <li>Hold the control key and click once to fire a shot.</li>
- </ol>
- <p>Note that if you long press to manually do a charged boost, it will cancel the glitch and you will have to do the steps above again.</p>`;
- tutorial.innerHTML = tut;
- };
-
- // CHEATS
-
- const evoTree = () => {
- const overlay = document.createElement("div");
- overlay.style.cssText =
- "position: fixed; top: 50%; left: 50%; transform: translate(-50%, -50%); background-color: rgba(0, 0, 0, 0); z-index: 1000; display: none;";
- const img = document.createElement("img");
- function isInputActive() {
- const e = document.activeElement;
- return e.matches("input") || e.matches("textarea");
- }
- img.src = "https://i.ibb.co/djBZ520/image.png";
- img.style.cssText = "display: block; max-width: 100%; height: auto; ";
- overlay.appendChild(img);
- document.body.appendChild(overlay);
- window.addEventListener("keydown", (e) => {
- if (!isInputActive() && e.code === "KeyY") {
- overlay.style.display = "block";
- }
- });
- window.addEventListener("keyup", (e) => {
- if (!isInputActive() && e.code === "KeyY") {
- overlay.style.display = "none";
- }
- });
- };
-
- const quickDisconnect = () => {
- if (!quickDisconnectx) {
- document.body.addEventListener("keydown", (e) => {
- if (e.ctrlKey && e.shiftKey && e.code === "KeyQ" && document.activeElement !== document.querySelector("div.chat-input input")) {
- try {
- game[obfuscatedNameTranslator.socketManager].disconnect();
- } catch {}
- }
- });
- quickDisconnectx = true;
- }
- };
-
- const betterVision = () => {
- try {
- currentScene[obfuscatedNameTranslator.setFlash] = () => true;
- } catch {}
- try {
- currentScene[obfuscatedNameTranslator.terrainManager].shadow.setShadowSize(1000000);
- currentScene[obfuscatedNameTranslator.terrainManager].shadow.setShadowSize = () => true;
- } catch {}
- if (!betterVisionx) {
- setInterval(() => {
- try {
- currentScene[obfuscatedNameTranslator.foodGlowContainer].zOrder = 996;
- currentScene[obfuscatedNameTranslator.foodContainer].zOrder = 997;
- currentScene[obfuscatedNameTranslator.namesLayer].zOrder = 998;
- currentScene[obfuscatedNameTranslator.animalsContainer].zOrder = 999;
- currentScene[obfuscatedNameTranslator.barsLayer].zOrder = 1000;
- currentScene[obfuscatedNameTranslator.chatContainer].zOrder = 1001;
- } catch {}
- try {
- game.viewport.clampZoom({
- minWidth: 0,
- maxWidth: 1e7,
- });
- game.viewport.plugins.plugins.clamp = null;
- game.viewport.plugins.plugins["clamp-zoom"] = null;
- } catch {}
- try {
- currentScene[obfuscatedNameTranslator.viewingGhosts] = true;
- currentScene[obfuscatedNameTranslator.ceilingsContainer].alpha = 0.3;
- } catch {}
- }, 300);
- // cache property names to speed up code
- let p = [];
- setInterval(() => {
- for (
- let i = 0;
- i < currentScene[obfuscatedNameTranslator.entityManager][obfuscatedNameTranslator.entityManagerProps.animalsList]?.length || 0;
- i++
- ) {
- try {
- if (currentScene[obfuscatedNameTranslator.entityManager][obfuscatedNameTranslator.entityManagerProps.animalsList][i].alpha < 0.5) {
- currentScene[obfuscatedNameTranslator.entityManager][obfuscatedNameTranslator.entityManagerProps.animalsList][i].alpha = 0.5;
- }
- if (currentScene[obfuscatedNameTranslator.entityManager][obfuscatedNameTranslator.entityManagerProps.animalsList][i].inner.alpha < 0.5) {
- currentScene[obfuscatedNameTranslator.entityManager][obfuscatedNameTranslator.entityManagerProps.animalsList][i].inner.alpha = 0.5;
- }
-
- // make nameObject and relatedObjects visible
- // cache stuff
- if (p.length === 0) {
- const temp = getAllProperties(
- currentScene[obfuscatedNameTranslator.entityManager][obfuscatedNameTranslator.entityManagerProps.animalsList][i]
- );
- p = temp.filter(
- (e) =>
- e.startsWith("_0x") &&
- typeof currentScene[obfuscatedNameTranslator.entityManager][obfuscatedNameTranslator.entityManagerProps.animalsList][i][e] ===
- "object"
- );
- }
- for (const e of p) {
- if (currentScene[obfuscatedNameTranslator.entityManager][obfuscatedNameTranslator.entityManagerProps.animalsList][i][e].visible != null)
- currentScene[obfuscatedNameTranslator.entityManager][obfuscatedNameTranslator.entityManagerProps.animalsList][i][e].visible = true;
- }
- } catch {}
- }
- }, 50);
- betterVisionx = true;
- }
- };
-
- const aimLine = () => {
- const overlayAnimals = [13, 61, 93, 94, 113];
-
- function createAimOverlay() {
- try {
- document.getElementById("aim-overlay").remove();
- } catch {}
- const aim_overlay = document.createElement("hr");
- document.querySelector("div.game").insertBefore(aim_overlay, document.querySelector("div.game").children[0]);
- aim_overlay.outerHTML =
- '<hr id="aim-overlay" style="border: 1px #f55d dotted;border-image: linear-gradient(to right, #f55d, #f550) 1;transform-origin: left;position: absolute;top: 50%;left: 50%;width: 40vw;display:none;pointer-events:none;">';
- }
- createAimOverlay();
- if (!aimLinex) {
- document.addEventListener("mousemove", () => {
- try {
- if (currentScene != null) {
- if (currentScene?.myAnimals?.[0] != null) {
- document.getElementById("aim-overlay").style.transform = `rotate(${
- (currentScene?.myAnimals?.[0]?.inner?.rotation * 180) / Math.PI +
- (currentScene?.myAnimals?.[0]?.visibleFishLevel === 101 ? 90 : -90)
- }deg)`;
- }
- }
- } catch {}
- });
- window.addEventListener(
- "keydown",
- (e) => {
- try {
- if (e.ctrlKey && overlayAnimals.includes(currentScene.myAnimals[0].visibleFishLevel)) {
- document.getElementById("aim-overlay").style.display = "block";
- }
- } catch {}
- },
- false
- );
- window.addEventListener(
- "keyup",
- (e) => {
- try {
- if (!e.ctrlKey) {
- document.getElementById("aim-overlay").style.display = "none";
- }
- } catch {}
- },
- false
- );
- window.addEventListener("focus", () => {
- try {
- document.getElementById("aim-overlay").style.display = "none";
- } catch {}
- });
- aimLinex = true;
- }
- };
-
- const clearChat = () => {
- if (!clearChatx) {
- document.addEventListener("keydown", (event) => {
- if (event.code === "KeyB" && document.activeElement !== document.querySelector("div.chat-input input")) {
- for (const b of currentScene[obfuscatedNameTranslator.chatMessages]) {
- b.renderable = false;
- b.render = () => undefined;
- }
- }
- });
- clearChatx = true;
- }
- };
-
- const boostHacks = () => {
- function showCtrlOverlay(e) {
- if (!document.getElementById("ctrl-overlay")) {
- createCtrlOverlay();
- }
- if (e.ctrlKey || e.altKey) {
- try {
- if (currentScene != null) {
- if (currentScene?.myAnimals?.[0] != null) {
- if (currentScene?.myAnimals?.[0]?.visibleFishLevel !== 101) {
- document.getElementById("ctrl-overlay").style.pointerEvents = "all";
- } else if (!e.shiftKey) {
- if (currentScene?.myAnimals?.[0]?.visibleFishLevel === 101) document.getElementById("ctrl-overlay").style.pointerEvents = "all";
- } else {
- document.getElementById("ctrl-overlay").style.pointerEvents = "none";
- }
- }
- }
- } catch {}
- }
- }
-
- function superShot() {
- try {
- handleLongPress(1);
- setTimeout(() => {
- handleLongPress(5000);
- }, 50);
- setTimeout(() => {
- handleLongPress(5000);
- }, 100);
- setTimeout(() => {
- handleLongPress(5000);
- }, 150);
- } catch {}
- }
-
- function createCtrlOverlay() {
- try {
- document.getElementById("ctrl-overlay").remove();
- } catch {}
- const ctrl_overlay = document.createElement("div");
- document.querySelector("div.game").insertBefore(ctrl_overlay, document.querySelector("div.game").children[0]);
- ctrl_overlay.outerHTML =
- '<div id="ctrl-overlay" style="width: 100%;height: 100%;position: absolute;display: block;z-index:10000;pointer-events:none;"></div>';
- document.getElementById("ctrl-overlay").addEventListener("contextmenu", (e) => e.preventDefault());
- }
- createCtrlOverlay();
- if (!boostHacksx) {
- window.addEventListener(
- "keydown",
- (e) => {
- try {
- showCtrlOverlay(e);
- } catch {}
- },
- false
- );
- window.addEventListener(
- "click",
- (e) => {
- try {
- const b = {
- ...boostData.default,
- ...boostData[currentScene?.myAnimals?.[0]?.visibleFishLevel],
- };
- if (e.ctrlKey) {
- if (e.shiftKey && currentScene?.myAnimals?.[0]?.visibleFishLevel === 107) {
- superShot();
- } else if (e.shiftKey && currentScene?.myAnimals?.[0]?.visibleFishLevel !== 101 && currentScene?.myAnimals?.[0]?._standing) {
- handleLongPress(randInt(5e8, 2 ** 31 - 1));
- } else {
- let inputManager = Object.getOwnPropertyNames(game)
- .map((v) => game[v])
- .find((v) => v.keys instanceof Array);
- inputManager.pointerDown = true;
- inputManager.pressElapsed = Infinity;
- inputManager.setPointerDown(false);
- }
- } else if (e.altKey) {
- handleLongPress(currentScene?.myAnimals?.[0]?._standing ? 41 : Math.floor(b.secLoadTime / 2));
- }
- } catch {}
- },
- false
- );
- window.addEventListener(
- "keyup",
- (e) => {
- try {
- if (!e.ctrlKey && !e.altKey) {
- document.getElementById("ctrl-overlay").style.pointerEvents = "none";
- }
- } catch {}
- },
- false
- );
- window.addEventListener("focus", () => {
- try {
- document.getElementById("ctrl-overlay").style.pointerEvents = "none";
- } catch {}
- });
- boostHacksx = true;
- }
- };
-
- const humpbackAutosongs = () => {
- if (!humpbackAutosongsx) {
- const songs = [
- [5, 5, 5],
- [5, 5000, 5],
- [5000, 5000, 5000],
- [5000, 5000, 5],
- ];
- const humpbackUiStyle = document.createElement("style");
- humpbackUiStyle.innerHTML = `
- #humpback-ui * {
- font-family:Quicksand;
- color:#fff;
- }
- #humpback-ui .hb-button p {
- margin:5px 0 0 0;
- font-size:12px;
- }
- #humpback-ui {
- display:flex;
- gap:8px;
- width:100%;
- justify-content:center;
- pointer-events:none;
- user-select:none;
- }
- #humpback-ui .hb-button {
- background:#0004;
- padding:10px 0;
- border-radius:15px;
- display:flex;
- flex-direction:column;
- align-items:center;
- justify-content:center;
- }
- #humpback-ui .hb-song {
- display:flex;
- flex-direction:row;
- gap:2px;
- width:81px;
- justify-content:center;
- }
- #humpback-ui .war {
- background:#ae3e41;
- }
- #humpback-ui .heal {
- background:#1aff00;
- }
- #humpback-ui .blast {
- background:#f6ff00;
- }
- #humpback-ui .ruin {
- background:#db7c00;
- }
- #humpback-ui .small {
- width:10px;
- height:10px;
- margin:2.5px 0;
- border-radius:999px;
- }
- #humpback-ui .large {
- width:15px;
- height:15px;
- border-radius:999px;
- }
-
- `;
- document.head.appendChild(humpbackUiStyle);
- setInterval(() => {
- try {
- if (currentScene?.myAnimals?.[0]?.visibleFishLevel != 87) {
- if (document.querySelector("#humpback-ui")) {
- document.querySelector("#humpback-ui").remove();
- }
- return;
- } else if (document.querySelector("#humpback-ui")) {
- return;
- }
- const humpbackUI = document.createElement("div");
- const parent = document.querySelector(".stats .middle");
-
- humpbackUI.innerHTML = `
- <div id="humpback-ui">
- <div class="hb-button">
- <div class="hb-song">
- <div class="war small"></div>
- <div class="war small"></div>
- <div class="war small"></div>
- </div>
- <p>War | 1</p>
- </div>
-
- <div class="hb-button">
- <div class="hb-song">
- <div class="heal small"></div>
- <div class="heal large"></div>
- <div class="heal small"></div>
- </div>
- <p>Heal | 2</p>
- </div>
-
- <div class="hb-button">
- <div class="hb-song">
- <div class="blast large"></div>
- <div class="blast large"></div>
- <div class="blast large"></div>
- </div>
- <p>Blast | 3</p>
- </div>
-
- <div class="hb-button">
- <div class="hb-song">
- <div class="ruin large"></div>
- <div class="ruin large"></div>
- <div class="ruin small"></div>
- </div>
- <p>Ruin | 4</p>
- </div>
- </div>
- `;
- parent.prepend(humpbackUI);
- } catch {}
- }, 100);
- document.addEventListener("keydown", (e) => {
- try {
- if (!["1", "2", "3", "4"].includes(e.key)) return;
- if (currentScene?.myAnimals?.[0]?.visibleFishLevel !== 87) return;
- for (const i in [0, 1, 2]) {
- setTimeout(() => {
- handleLongPress(songs[parseInt(e.key) - 1][i]);
- }, Math.max(document.querySelector("div.top-right div.latency > span.value")?.innerText * 3 || 100, 100) * i);
- }
- } catch {}
- });
- humpbackAutosongsx = true;
- }
- };
-
- const obfuscatedNameTranslator = {};
- const getAllProperties = (obj) => {
- return [...Object.getOwnPropertyNames(Object.getPrototypeOf(obj)), ...Object.getOwnPropertyNames(obj)];
- };
- const throttle = (func, delay) => {
- let prev = 0;
- return (...args) => {
- const now = Date.now();
- if (now - prev > delay) {
- prev = now;
- return func(...args);
- }
- };
- };
- const injector = () => {
- const reflect = {};
- for (const v of Object.getOwnPropertyNames(Reflect)) {
- reflect[v] = Reflect[v];
- }
-
- const proxy = Proxy;
-
- const spoof = new WeakMap();
- spoof.set = spoof.set;
- spoof.get = spoof.get;
- spoof.has = spoof.has;
-
- const proxies = new WeakSet();
- proxies.add = proxies.add;
- proxies.has = proxies.has;
- proxies.delete = proxies.delete;
-
- const lookupGetter = Object.prototype.__lookupGetter__;
-
- const hook = (obj, name, handler) => {
- const hooked = new proxy(obj[name], handler);
- spoof.set(hooked, obj[name]);
- obj[name] = hooked;
- };
-
- hook(Function.prototype, "toString", {
- apply(f, th, args) {
- return reflect.apply(f, spoof.get(th) || th, args);
- },
- });
-
- hook(window, "Proxy", {
- construct(f, args) {
- const result = reflect.construct(f, args);
- proxies.add(result);
- return result;
- },
- });
-
- hook(proxy, "revocable", {
- apply(f, th, args) {
- const result = reflect.apply(f, th, args);
- proxies.add(result.proxy);
- return result;
- },
- });
-
- let lastInjectionSuccessTime = 0;
- hook(Function.prototype, "bind", {
- apply(f, th, args) {
- if (proxies.has(args[0])) return reflect.apply(f, th, args);
- try {
- try {
- if (lookupGetter.call(args[0], "aboveBgPlatformsContainer") != null) return reflect.apply(f, th, args);
- } catch {}
- if (args[0] && args[0].aboveBgPlatformsContainer != null) {
- currentScene = args[0];
- game = args[0].game;
-
- const currentSceneKeys = getAllProperties(currentScene);
- const obCurrentSceneKeys = currentSceneKeys.filter((e) => e.startsWith("_0x"));
- obfuscatedNameTranslator.setFlash =
- Object.getOwnPropertyNames(currentScene.__proto__.__proto__)
- .filter((v) => v.startsWith("_0x"))
- .find((v) => currentScene[v] instanceof Function) || obfuscatedNameTranslator.setFlash;
- obfuscatedNameTranslator.terrainManager =
- obCurrentSceneKeys.find((e) => typeof currentScene[e]?.shadow !== "undefined") || obfuscatedNameTranslator.terrainManager;
-
- const foodContainerInter = setInterval(() => {
- obfuscatedNameTranslator.foodGlowContainer =
- obCurrentSceneKeys.find(
- (e) =>
- typeof currentScene[e]?.children?.[0]?.texture?.textureCacheIds?.[0] !== "undefined" &&
- currentScene[e].children?.[0].texture.textureCacheIds[0] === "food_glow.png"
- ) || obfuscatedNameTranslator.foodGlowContainer;
- obfuscatedNameTranslator.foodContainer =
- obCurrentSceneKeys.find(
- (e) =>
- typeof currentScene[e]?.children?.[0]?.texture?.textureCacheIds?.[0] !== "undefined" &&
- [
- "food.png",
- "flappy.png",
- "meat.png",
- "man.png",
- "algae.png",
- "apple.png",
- "fruit.png",
- "volcanofood.png",
- "bubble.png",
- "coconut.png",
- "coldfood.png",
- "coldalgae.png",
- "reeffood.png",
- "reefalgae.png",
- ].includes(currentScene[e].children?.[0].texture.textureCacheIds?.[0])
- ) || obfuscatedNameTranslator.foodContainer;
-
- if (typeof obfuscatedNameTranslator.foodGlowContainer !== "undefined" && typeof obfuscatedNameTranslator.foodContainer !== "undefined")
- clearInterval(foodContainerInter);
- }, 1000);
-
- obfuscatedNameTranslator.ceilingsContainer =
- obCurrentSceneKeys.find(
- (e) =>
- typeof currentScene[e]?.children?.[0]?.settings?.layerId !== "undefined" &&
- currentScene[e].children?.[0].settings.layerId === "ceilings"
- ) || obfuscatedNameTranslator.ceilingsContainer;
-
- obfuscatedNameTranslator.viewingGhosts =
- obCurrentSceneKeys.find((e) => typeof currentScene[e] === "boolean") || obfuscatedNameTranslator.viewingGhosts;
-
- obfuscatedNameTranslator.entityManager =
- obCurrentSceneKeys.find((e) => typeof currentScene[e]?.entitiesList !== "undefined") || obfuscatedNameTranslator.entityManager;
- obfuscatedNameTranslator.entityManagerProps = {};
- const entityManagerKeys = getAllProperties(currentScene[obfuscatedNameTranslator.entityManager]);
-
- const animalListInter = setInterval(() => {
- obfuscatedNameTranslator.animalsContainer =
- obCurrentSceneKeys.find((e) => typeof currentScene[e]?.children?.[0]?.isHiding !== "undefined") ||
- obfuscatedNameTranslator.animalsContainer;
-
- obfuscatedNameTranslator.entityManagerProps.animalsList =
- entityManagerKeys
- .filter((e) => e.startsWith("_0x"))
- .find((e) => typeof currentScene?.[obfuscatedNameTranslator.entityManager]?.[e]?.[0] !== "undefined") ||
- obfuscatedNameTranslator.entityManagerProps.animalsList;
- if (
- typeof obfuscatedNameTranslator.animalsContainer !== "undefined" &&
- typeof obfuscatedNameTranslator.entityManagerProps.animalsList !== "undefined"
- )
- clearInterval(animalListInter);
- }, 1000);
-
- obfuscatedNameTranslator.chatMessages =
- obCurrentSceneKeys.find((e) => typeof currentScene[e] === "object" && typeof currentScene[e]?.length === "number") ||
- obfuscatedNameTranslator.chatMessages;
-
- // TODO: fix this in the future since numbers could change
- // need to get ALL layers and order them from lowest zIndex to highest zIndex
- // then get layers by their index
-
- // namesLayer zIndex = 18
- // barsLayer zIndex = 15
- // chatContainer zIndex = 50
- obfuscatedNameTranslator.barsLayer =
- obCurrentSceneKeys.find((e) => typeof currentScene[e] === "object" && currentScene[e]?.zIndex === 15) ||
- obfuscatedNameTranslator.barsLayer;
- obfuscatedNameTranslator.namesLayer =
- obCurrentSceneKeys.find((e) => typeof currentScene[e] === "object" && currentScene[e]?.zIndex === 18) ||
- obfuscatedNameTranslator.namesLayer;
- obfuscatedNameTranslator.chatContainer =
- obCurrentSceneKeys.find((e) => typeof currentScene[e] === "object" && currentScene[e]?.zIndex === 50) ||
- obfuscatedNameTranslator.chatContainer;
-
- const gameKeys = getAllProperties(game);
- obfuscatedNameTranslator.socketManager =
- gameKeys.find((e) => typeof game[e]?.sendBytePacket !== "undefined") || obfuscatedNameTranslator.socketManager;
-
- quickDisconnect();
- betterVision();
- aimLine();
- clearChat();
- boostHacks();
- humpbackAutosongs();
- try {
- gameState = document
- .getElementById("app")
- ._vnode.appContext.config.globalProperties.$simpleState.states.find((v) => v._storeMeta.id === "game");
- } catch {}
- // throttle
- if (lastInjectionSuccessTime < Date.now() - 3000) {
- ui.message.success("fsploit - Loaded client modifications");
- lastInjectionSuccessTime = Date.now();
- }
- }
- } catch {}
- return reflect.apply(f, th, args);
- },
- });
- };
-
- // MAIN
-
- window.addEventListener("load", () => {
- setTimeout(() => {
- fetch("https://raw.githubusercontent.com/mahdi13377/fsploit-public/main/mainMod.js", { cache: "no-cache" })
- .then((response) => {
- return response.text();
- })
- .then((data) => {
- if (currentScript !== data) {
- ui.nukeDOM();
- ui.alert({
- title: "fsploit",
- message: "fsploit has been updated. Please reload the page.",
- type: "info",
- dismissButtonText: "Reload",
- onDismiss: () => location.reload(),
- });
- }
- GM_setValue("mainModule", data);
- })
- .catch(() => {
- location.reload();
- });
- }, 1000);
-
- const main = () => {
- injector();
- applyStyles();
- evoTree();
- const { close } = ui.message.success(`fsploit v${fsploitVersion} - Initialized`);
- setTimeout(() => {
- close();
- ui.message.info("Brought to you by Vast Softworks LLC.");
- }, 3000);
- };
-
- let sourceVersion = "unknown,unknown";
- try {
- sourceVersion = [
- document.querySelector("head script[type='module'][src*='index']").src.match(/index\.(?<name>[0-9a-z]*)\.js/i).groups.name,
- document.querySelector("head link[rel='modulepreload'][href*='vendor']").href.match(/vendor\.(?<name>[0-9a-z]*)\.js/i).groups.name,
- ].join(",");
- } catch {}
- if (sourceVersion === knownClientVersion) {
- main();
- } else {
- ui.confirm({
- title: "Untested Deeeep.io version",
- message: `Anti-cheat bypass features may not work as expected and get your account banned.
- <br>
- Do you want to proceed anyway?
- <br>
- <p style="font-size:smaller;margin-top: 12px;">
- Debug info:
- <span style="background: #0004;border: 1px solid #fff3;padding: 1px 3px;border-radius: 4px;user-select: auto;">
- index: ${sourceVersion.split(",")[0]}, vendor: ${sourceVersion.split(",")[1]}
- </span>
- </p>`,
- dangerouslyUseHTMLString: true,
- type: "warning",
- confirmButtonText: "Yes",
- cancelButtonText: "No",
- onConfirm: main,
- onCancel: () => {},
- });
- }
- });