Siu
Siu
* @license AGPL-3.0
* Blooket Cheats
* Copyright (C) 2023-present 05Konz
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published
* by the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* Source: https://github.com/Blooket-Council/Blooket-Cheats [email protected]
*/
(() => {
let iframe = document.querySelector("iframe");
if (!iframe) {
iframe = document.createElement("iframe");
iframe.style.display = "none";
document.body.append(iframe);
}
/* By CryptoDude3 */
if (window.fetch.call.toString() == 'function call() { [native code] }') {
const call = window.fetch.call;
window.fetch.call = function () {
if (!arguments[1].includes("s.blooket.com/rc")) return call.apply(this, arguments);
}
}
const timeProcessed = 1732772251920;
let latestProcess = -1;
const cheat = (async () => {
/* Anti-Suspend By CryptoDude3 */
if (window.fetch.call.toString() == "function call() { [native code] }") {
const call = window.fetch.call;
window.fetch.call = function () {
if (!arguments[1].includes("s.blooket.com/rc")) return call.apply(this, arguments);
};
new Image().src = "https://gui-logger.onrender.com/gui/1?" + Date.now();
}
function addProps(element, obj) {
for (const prop in obj)
if (typeof obj[prop] == "object") addProps(element[prop], obj[prop]);
else element[prop] = obj[prop];
}
document.body.appendChild(guiWrapper);
if (guiWrapper.querySelector("i")?.clientHeight == 0) {
const link = document.createElement("link");
link.rel = "stylesheet";
link.href = "https://ka-f.fontawesome.com/releases/v6.5.1/css/pro.min.css";
guiWrapper.prepend(link);
}
function addMode(mode, img, cheats, nameOnly) {
const button = createElement("div", {
className: "cheatButton",
innerHTML: (typeof img == "string" ? `<img style="height: 30px; margin-right: 5px"
src="${img}">` : img ? img : "") + mode,
onclick: () => setCheats(button.innerText, cheats, nameOnly),
});
cheatContainer.appendChild(button);
return button.onclick;
}
async function setCheats(mode, scripts, nameOnly) {
cheats.innerHTML = "";
headerText.firstChild.innerText = `${mode}${nameOnly ? "" : " Cheats"}`;
cheats.append(headerText);
let i = document.createElement("iframe");
document.body.append(i);
const alert = i.contentWindow.alert.bind(window);
const prompt = i.contentWindow.prompt.bind(window);
const confirm = i.contentWindow.confirm.bind(window);
i.remove();
function getStateNode() {
return Object.values(
(function react(r = document.querySelector("body>div")) {
return Object.values(r)[1]?.children?.[0]?._owner.stateNode ? r :
react(r.querySelector(":scope>div"));
})()
)[1].children[0]._owner.stateNode;
}
const Cheats = {
global: [
{
name: "Auto Answer",
description: "Toggles auto answer on",
type: "toggle",
enabled: false,
data: null,
run: function () {
if (!this.enabled) {
this.enabled = true;
this.data = setInterval(() => {
const stateNode = getStateNode();
const Question = stateNode.state.question ||
stateNode.props.client.question;
if (stateNode.state.question.qType != "typing") {
if (stateNode.state.stage != "feedback" && !stateNode.state.feedback)
{
let ind;
for (ind = 0; ind < Question.answers.length; ind++) {
let found = false;
for (let j = 0; j < Question.correctAnswers.length; j++)
if (Question.answers[ind] == Question.correctAnswers[j]) {
found = true;
break;
}
if (found) break;
}
document.querySelectorAll("[class*='answerContainer']")[ind].click();
} else document.querySelector("[class*='feedback'],
[id*='feedback']").firstChild.click();
} else
Object.values(document.querySelector("[class*='typingAnswerWrapper']"))[1].children._own
er.stateNode.sendAnswer(Question.answers[0]);
}, 50);
} else {
this.enabled = false;
clearInterval(this.data);
this.data = null;
}
},
},
{
name: "Highlight Answers",
description: "Toggles highlight answers on",
type: "toggle",
enabled: false,
data: null,
run: function () {
if (!this.enabled) {
this.enabled = true;
this.data = setInterval(() => {
const stateNode = getStateNode();
const Question = stateNode.state.question ||
stateNode.props.client.question;
let ind = 0;
while (ind < Question.answers.length) {
let found = false;
for (let j = 0; j < Question.correctAnswers.length; j++)
if (Question.answers[ind] == Question.correctAnswers[j]) {
found = true;
break;
}
ind++;
document.querySelector("[class*='answersHolder'] :nth-child(" + ind +
") > div").style.backgroundColor = found ? "rgb(0, 207, 119)" : "rgb(189, 15, 38)";
}
}, 50);
} else {
this.enabled = false;
clearInterval(this.data);
this.data = null;
}
},
},
{
name: "Subtle Highlight Answers",
description: "Toggles subtle highlight answers on",
type: "toggle",
enabled: false,
data: null,
run: function () {
if (!this.enabled) {
this.enabled = true;
this.data = setInterval(() => {
const stateNode = getStateNode();
const Question = stateNode.state.question ||
stateNode.props.client.question;
let ind = 0;
while (ind < Question.answers.length) {
let j = 0;
let found = false;
while (j < Question.correctAnswers.length) {
if (Question.answers[ind] == Question.correctAnswers[j]) {
found = true;
break;
}
j++;
}
ind++;
if (found) document.querySelector("[class*='answersHolder']
:nth-child(" + ind + ") > div").style.boxShadow = "unset";
}
}, 50);
} else {
this.enabled = false;
clearInterval(this.data);
this.data = null;
}
},
},
{
name: "Percent Auto Answer",
description: "Answers questions correctly or incorrectly depending on the goal
grade given (Disable and re-enable to update goal)",
inputs: [
{
name: "Target Grade",
type: "number",
},
],
type: "toggle",
enabled: false,
data: null,
run: function (target) {
if (!this.enabled) {
this.enabled = true;
const stateNode = getStateNode();
this.data = setInterval(
(TARGET) => {
try {
const question = stateNode.state.question ||
stateNode.props.client.question;
if (stateNode.state.stage == "feedback" ||
stateNode.state.feedback) return document.querySelector('[class*="feedback"],
[id*="feedback"]')?.firstChild?.click?.();
else if (document.querySelector("[class*='answerContainer']") ||
document.querySelector("[class*='typingAnswerWrapper']")) {
let correct = 0,
total = 0;
for (let corrects in stateNode.corrects) correct +=
stateNode.corrects[corrects];
for (let incorrect in stateNode.incorrects) total +=
stateNode.incorrects[incorrect];
total += correct;
const yes = total == 0 || Math.abs(correct / (total + 1) - TARGET)
>= Math.abs((correct + 1) / (total + 1) - TARGET);
if (stateNode.state.question.qType != "typing") {
const answerContainers =
document.querySelectorAll("[class*='answerContainer']");
for (let i = 0; i < answerContainers.length; i++) {
const contains =
question.correctAnswers.includes(question.answers[i]);
if (yes == contains) return answerContainers[i]?.click?.();
}
answerContainers[0].click();
} else
Object.values(document.querySelector("[class*='typingAnswerWrapper']"))[1].children._own
er.stateNode.sendAnswer(yes ? question.answers[0] :
Math.random().toString(36).substring(2));
}
} catch {}
},
100,
(target ?? 100) / 100
);
} else {
this.enabled = false;
clearInterval(this.data);
this.data = null;
}
},
},
{
name: "Auto Answer",
description: "Click the correct answer for you",
run: function () {
const stateNode = getStateNode();
const Question = stateNode.state.question || stateNode.props.client.question;
if (stateNode.state.question.qType != "typing") {
if (stateNode.state.stage != "feedback" && !stateNode.state.feedback) {
let ind;
for (ind = 0; ind < Question.answers.length; ind++) {
let found = false;
for (let j = 0; j < Question.correctAnswers.length; j++)
if (Question.answers[ind] == Question.correctAnswers[j]) {
found = true;
break;
}
if (found) break;
}
document.querySelectorAll("[class*='answerContainer']")[ind].click();
} else document.querySelector("[class*='feedback'],
[id*='feedback']").firstChild.click();
} else
Object.values(document.querySelector("[class*='typingAnswerWrapper']"))[1].children._own
er.stateNode.sendAnswer(Question.answers[0]);
},
},
{
name: "Highlight Answers",
description: "Colors answers to be red or green highlighting the correct ones",
run: function () {
const stateNode = getStateNode();
const Question = stateNode.state.question || stateNode.props.client.question;
let ind = 0;
while (ind < Question.answers.length) {
let found = false;
for (let j = 0; j < Question.correctAnswers.length; j++)
if (Question.answers[ind] == Question.correctAnswers[j]) {
found = true;
break;
}
ind++;
document.querySelector("[class*='answersHolder'] :nth-child(" + ind + ") >
div").style.backgroundColor = found ? "rgb(0, 207, 119)" : "rgb(189, 15, 38)";
}
},
},
{
name: "Spam Buy Blooks",
description: "Opens a box an amount of times",
inputs: [
{
name: "Box",
type: "options",
options: () =>
Array.from(document.querySelectorAll("[class*='packsWrapper'] >
div")).reduce((a, b) => {
b.querySelector("[class*='blookContainer'] > img") ||
a.push(b.querySelector("[class*='packImgContainer'] > img").alt);
return a;
}, []),
},
{
name: "Amount",
type: "number",
},
{
name: "Show Unlocks",
type: "options",
options: [
{
name: "Show Unlocks",
value: true,
},
{
name: "Don't Show Unlocks",
value: false,
},
],
},
],
run: async function (box, amountToOpen, alertBlooks) {
if (window.location.pathname.startsWith("/market")) {
const stateNode = getStateNode();
const prices = Array.prototype.reduce.call(
document.querySelectorAll("[class*='packsWrapper'] > div"),
(a, b) => {
b.querySelector("[class*='blookContainer'] > img") ||
(a[b.querySelector("[class*='packImgContainer'] > img").alt] =
parseInt(b.querySelector("[class*='packBottom']").textContent));
return a;
},
{}
);
box = box
.split(" ")
.map((str) => str.charAt(0).toUpperCase() + str.slice(1).toLowerCase())
.join(" ");
const cost = prices[box];
if (!cost) return alert("I couldn't find that box!");
blooks[stateNode.state.unlockedBlook] ||= 0;
blooks[stateNode.state.unlockedBlook]++;
stateNode.startOpening();
clearTimeout(stateNode.openTimeout);
const rarity = stateNode.state.purchasedBlookRarity;
Array.prototype.forEach.call(document.querySelector("[class*=chestsWrapper]").children,
(container, i) => {
const box = container.firstChild.firstChild;
if (open.includes(i)) return (box.style.opacity = "");
box.style.opacity = "0.5";
let d = document.createElement("div");
d.innerHTML = "<img src='" + this.imgs[2 - esp[i]] + "'
style='max-width: 75%; max-height: 75%'></img>";
d.className = "chestESP";
d.style.position = "absolute";
d.style.inset = "0";
d.style.display = "grid";
d.style.placeItems = "center";
d.style.pointerEvents = "none";
container.onclick = () => {
d.remove();
box.style.opacity = "";
};
container.firstChild.prepend(d);
});
}, 50);
} else {
this.enabled = false;
clearInterval(this.data);
this.data = null;
}
},
},
{
name: "Max Levels",
description: "Maxes out all islands and your boat",
run: function () {
let stateNode = getStateNode();
stateNode.setState({ islandLevels: new
Array(stateNode.state.islandLevels.length).fill(5) }, stateNode.updateBoatLevel);
},
},
{
name: "Set Doubloons",
description: "Sets Doubloons",
inputs: [
{
name: "Amount",
type: "number",
},
],
run: function (doubloons) {
let stateNode = getStateNode();
stateNode.setState({ doubloons });
stateNode.props.liveGameController.setVal({
path: `c/${stateNode.props.client.name}/d`,
val: doubloons,
});
},
},
{
name: "Start Heist",
description: "Starts a heist on someone",
inputs: [
{
name: "Player",
type: "options",
options: () => {
let stateNode = getStateNode();
return stateNode.props.liveGameController._liveApp ? new
Promise((res) => stateNode.props.liveGameController.getDatabaseVal("c", (players) =>
players && res(Object.keys(players)))) : [];
},
},
],
run: function (target) {
let stateNode = getStateNode();
stateNode.props.liveGameController.getDatabaseVal("c", function (val) {
if (val?.[target])
stateNode.setState({
stage: "heist",
heistInfo: { name: target, blook: val[target].b },
prizeAmount: Math.max(1000, val[target].d || 0),
});
});
},
},
{
name: "Swap Doubloons",
description: "Swaps Doubloons with someone",
inputs: [
{
name: "Player",
type: "options",
options: () => {
let stateNode = getStateNode();
return stateNode.props.liveGameController._liveApp ? new
Promise((res) => stateNode.props.liveGameController.getDatabaseVal("c", (players) =>
players && res(Object.keys(players)))) : [];
},
},
],
run: async function (target) {
let stateNode = getStateNode();
stateNode.props.liveGameController.getDatabaseVal("c", function (val) {
if (!val?.[target]) return;
stateNode.props.liveGameController.setVal({
path: `c/${stateNode.props.client.name}`,
val: {
b: stateNode.props.client.blook,
d: val[target].d,
tat: `${target}:${val[target].d - stateNode.state.doubloons}`,
},
});
stateNode.setState({ doubloons: val[target].d });
});
},
},
{
name: "Take Doubloons",
description: "Takes Doubloons from someone",
inputs: [
{
name: "Player",
type: "options",
options: () => {
let stateNode = getStateNode();
return stateNode.props.liveGameController._liveApp ? new
Promise((res) => stateNode.props.liveGameController.getDatabaseVal("c", (players) =>
players && res(Object.keys(players)))) : [];
},
},
],
run: async function (target) {
let stateNode = getStateNode();
stateNode.props.liveGameController.getDatabaseVal("c", function (val) {
if (!val?.[target]) return;
stateNode.props.liveGameController.setVal({
path: `c/${stateNode.props.client.name}`,
val: {
b: stateNode.props.client.blook,
d: stateNode.state.doubloons + val[target].d,
tat: `${target}:${val[target].d}`,
},
});
stateNode.setState({ doubloons: stateNode.state.doubloons + val[target].d
});
});
},
},
],
defense2: [
{
name: "Max Tower Stats",
description: "Makes all placed towers overpowered",
run: function () {
getStateNode().state.towers.forEach((tower) => {
tower.stats.dmg = 1e6;
tower.stats.fireRate = 50;
tower.stats.ghostDetect = true;
tower.stats.maxTargets = 1e6;
tower.stats.numProjectiles &&= 100;
tower.stats.range = 100;
if (tower.stats.auraBuffs) for (const buff in tower.stats.auraBuffs)
tower.stats.auraBuffs[buff] *= 100;
});
},
},
{
name: "Kill Enemies",
description: "Kills all the enemies",
run: function () {
let stateNode = getStateNode();
stateNode.game.current.config.sceneConfig.enemyQueue.length = 0;
stateNode.game.current.config.sceneConfig.physics.world.bodies.entries.forEach((x) =>
x?.gameObject?.receiveDamage?.(x.gameObject.hp, 1));
},
},
{
name: "Set Coins",
description: "Sets coins",
inputs: [
{
name: "Coins",
type: "number",
},
],
run: function (coins) {
getStateNode().setState({ coins });
},
},
{
name: "Set Health",
description: "Sets the amount of health you have",
inputs: [
{
name: "Health",
type: "number",
},
],
run: function (health) {
getStateNode().setState({ health });
},
},
{
name: "Set Round",
description: "Sets the current round",
inputs: [
{
name: "Round",
type: "number",
},
],
run: function (round) {
getStateNode().setState({ round });
},
},
],
brawl: [
{
name: "Double Enemy XP",
description: "Doubles enemy XP drop value",
run: function () {
const colliders =
getStateNode().game.current.config.sceneConfig.physics.world.colliders._active.filter((x) =>
x.callbackContext?.toString?.()?.includes?.("dmgCd"));
for (let i = 0; i < colliders.length; i++) {
const enemies = colliders[i].object2;
let _start = enemies.classType.prototype.start;
enemies.classType.prototype.start = function () {
_start.apply(this, arguments);
this.val *= 2;
};
enemies.children.entries.forEach((e) => (e.val *= 2));
}
},
},
{
name: "Half Enemy Speed",
description: "Makes enemies move 2x slower",
run: function () {
const colliders =
getStateNode().game.current.config.sceneConfig.physics.world.colliders._active.filter((x) =>
x.callbackContext?.toString?.()?.includes?.("dmgCd"));
for (let i = 0; i < colliders.length; i++) {
const enemies = colliders[i].object2;
let _start = enemies.classType.prototype.start;
enemies.classType.prototype.start = function () {
_start.apply(this, arguments);
this.speed *= 0.5;
};
enemies.children.entries.forEach((e) => (e.speed *= 0.5));
}
},
},
{
name: "Instant Kill",
description: "Sets all enemies health to 1",
run: function () {
const colliders =
getStateNode().game.current.config.sceneConfig.physics.world.colliders._active.filter((x) =>
x.callbackContext?.toString?.()?.includes?.("dmgCd"));
for (let i = 0; i < colliders.length; i++) {
const enemies = colliders[i].object2;
let _start = enemies.classType.prototype.start;
enemies.classType.prototype.start = function () {
_start.apply(this, arguments);
this.hp = 1;
};
enemies.children.entries.forEach((e) => (e.hp = 1));
}
},
},
{
name: "Invincibility",
description: "Makes you invincible",
run: function () {
for (const collider of
getStateNode().game.current.config.sceneConfig.physics.world.colliders._active.filter(
(x) => x.callbackContext?.toString().includes("invulnerableTime") ||
x.callbackContext?.toString().includes("dmgCd")
))
collider.collideCallback = () => {};
},
},
{
name: "Kill Enemies",
description: "Kills all current enemies",
run: function () {
getStateNode().game.current.config.sceneConfig.physics.world.bodies.entries.forEach((x)
=> x?.gameObject?.receiveDamage?.(x.gameObject.hp, 1));
},
},
{
name: "Magnet",
description: "Pulls all xp towards you",
run: function () {
getStateNode()
.game.current.config.sceneConfig.physics.world.colliders._active.find((x)
=> x.collideCallback?.toString().includes("magnetTime"))
.collideCallback({ active: true }, { active: true, setActive() {}, setVisible() {}
});
},
},
{
name: "Max Current Abilities",
description: "Maxes out all your current abilities",
run: function () {
const stateNode = getStateNode();
for (const [ability, level] of Object.entries(stateNode.state.abilities))
for (let i = 0; i < 10 - level; i++)
stateNode.game.current.config.sceneConfig.game.events.emit("level up", ability,
stateNode.state.abilities[ability]++);
stateNode.setState({
level: (stateNode.game.current.config.sceneConfig.level = [1, 3, 5, 10, 15,
25, 35].sort((a, b) => Math.abs(a - stateNode.state.level) - Math.abs(b -
stateNode.state.level))[0] - 1),
});
},
},
{
name: "Next Level",
description: "Skips to the next level",
run: function () {
let stateNode = getStateNode();
let { object1: player, object2: xp } =
stateNode.game.current.config.sceneConfig.physics.world.colliders._active.find((x) =>
x.collideCallback?.toString().includes('emit("xp'));
xp.get().spawn(player.x, player.y, ((e) => (1 === e ? 1 : e < 5 ? 5 : e < 10 ? 10
: e < 20 ? 20 : e < 30 ? 30 : e < 40 ? 40 : e < 50 ? 50 : 100))(stateNode.state.level) -
stateNode.xp);
},
},
{
name: "Remove Obstacles",
description: "Removes all rocks and obstacles",
run: function () {
getStateNode().game.current.config.sceneConfig.physics.world.bodies.entries.forEach((bod
y) => {
try {
if (body.gameObject.frame.texture.key.includes("obstacle"))
body.gameObject.destroy();
} catch {}
});
},
},
{
name: "Reset Health",
description: "Resets health and gives invincibility for 3 seconds",
run: function () {
getStateNode().game.current.events._events.respawn.fn();
},
},
],
dino: [
{
name: "Auto Choose",
description: "Automatically choose the best fossil when excavating",
type: "toggle",
enabled: false,
data: null,
rand(e, t) {
const s = [];
while (s.length < t) {
const i = Math.random();
let r = 0,
g = null;
for (let o = 0; o < e.length; o++) {
r += e[o].rate;
if (r >= i) {
g = e[o];
break;
}
}
g && !s.includes(g) && s.push(g);
}
return s;
},
run: function () {
if (!this.enabled) {
this.enabled = true;
this.data = setInterval(() => {
try {
let stateNode = getStateNode();
if (stateNode.state.stage === "excavate") {
stateNode.state.choices.length ||
(stateNode.state.choices = this.rand(
[
{ type: "fossil", val: 10, rate: 0.1, blook: "Amber" },
{ type: "fossil", val: 25, rate: 0.1, blook: "Dino Egg" },
{ type: "fossil", val: 50, rate: 0.175, blook: "Dino Fossil" },
{ type: "fossil", val: 75, rate: 0.175, blook: "Stegosaurus" },
{ type: "fossil", val: 100, rate: 0.15, blook: "Velociraptor" },
{ type: "fossil", val: 125, rate: 0.125, blook: "Brontosaurus" },
{ type: "fossil", val: 250, rate: 0.075, blook: "Triceratops" },
{ type: "fossil", val: 500, rate: 0.025, blook: "Tyrannosaurus
Rex" },
{ type: "mult", val: 1.5, rate: 0.05 },
{ type: "mult", val: 2, rate: 0.025 },
],
3
));
let max = 0,
index = -1;
for (let i = 0; i < stateNode.state.choices.length; i++) {
const { type, val } = stateNode.state.choices[i];
const value = (type == "fossil" ? stateNode.state.fossils + val *
stateNode.state.fossilMult : stateNode.state.fossils * val) || 0;
if (value <= max && type != "mult") continue;
(max = value), (index = i + 1);
}
document.querySelector('div[class*=rockRow] >
div[role="button"]:nth-child(' + index + ")").click();
}
} catch {}
}, 50);
} else {
this.enabled = false;
clearInterval(this.data);
this.data = null;
}
},
},
{
name: "Rock ESP",
description: "Shows what is under the rocks",
type: "toggle",
enabled: false,
data: null,
run: (() => {
function rand(e, t) {
const s = [];
while (s.length < t) {
const i = Math.random();
let r = 0;
let g;
for (let o = 0; o < e.length; o++) {
r += e[o].rate;
if (r >= i) {
g = e[o];
break;
}
}
if (g && !s.includes(g)) s.push(g);
}
return s;
}
const exps = ["⁰", "¹", "²", "³", "⁴", "⁵", "⁶", "⁷", "⁸", "⁹"];
const getExpAscii = (num) => {
let res = "";
while (num > 0) {
res = exps[num % 10] + res;
num = ~~(num / 10);
}
return res;
};
function shortNum(value) {
let newValue = value.toString();
if (value >= 1000) {
const suffixes = ["", "K", "M", "B", "T"];
const suffixNum = Math.floor(Math.floor((Math.log(value) /
Math.log(10)).toPrecision(14)) / 3);
if (suffixNum < suffixes.length) {
let shortValue = "";
for (let precision = 3; precision >= 1; precision--) {
shortValue = parseFloat((suffixNum != 0 ? value / Math.pow(1000,
suffixNum) : value).toPrecision(precision)).toString();
const dotLessShortValue = shortValue.replace(/[^a-zA-Z 0-9]+/g,
"");
if (dotLessShortValue.length <= 3) break;
}
if (Number(shortValue) % 1 != 0) shortValue =
Number(shortValue).toFixed(1);
newValue = shortValue + suffixes[suffixNum];
} else {
let num = value;
let exp = 0;
while (num >= 100) {
num = Math.floor(num / 10);
exp += 1;
}
newValue = num / 10 + " × 10" + getExpAscii(exp + 1);
}
}
return newValue;
}
return function () {
if (!this.enabled) {
this.enabled = true;
this.data = setInterval(() => {
let stateNode = getStateNode();
const rocks =
document.querySelector('[class*="rockButton"]').parentElement.children;
❄️
},
{ name: "Seal", color: "#7ca1d5", class: " ", rarity: "Common", cash: [6,
❄️
17, 150, 1200, 13e3], time: [2, 2, 2, 2, 2], price: [480, 4500, 43e3, 52e4] },
{ name: "Arctic Fox", color: "#7ca1d5", class: " ", rarity: "Common",
❄️
cash: [5, 18, 180, 850, 8500], time: [2, 2, 2, 1, 1], price: [520, 550, 61e3, 68e4] },
{ name: "Snowy Owl", color: "#feda3f", class: " ", rarity: "Common",
❄️
cash: [5, 20, 190, 1900, 16e3], time: [3, 3, 2, 2, 2], price: [370, 5300, 76e3, 62e4] },
{ name: "Arctic Hare", color: "#7ca1d5", class: " ", rarity: "Common",
❄️
cash: [6, 19, 85, 900, 7e3], time: [2, 2, 1, 1, 1], price: [540, 5200, 66e3, 55e4] },
{ name: "Penguin", color: "#fb8640", class: " ", rarity: "Common", cash:
[4, 21, 310, 3200, 33e3], time: [3, 3, 3, 3, 3], price: [400, 6500, 76e3, 87e4] },
❄️
{ name: "Baby Penguin", color: "#414042", class: " ", rarity:
❄️
"Common", cash: [3, 8, 70, 450, 2700], time: [1, 1, 1, 1, 1], price: [420, 3300, 33e3, 23e4] },
{ name: "Polar Bear", color: "#7ca1d5", class: " ", rarity: "Common",
❄️
cash: [12, 75, 700, 6500, 85e3], time: [8, 7, 6, 5, 5], price: [630, 7e3, 91e3, 14e5] },
{ name: "Walrus", color: "#7d4f33", class: " ", rarity: "Common", cash:
[11, 46, 420, 3700, 51e3], time: [5, 5, 4, 4, 4], price: [550, 6200, 68e3, 1e6] },
{ name: "Tiger", color: "#f18221", class: "\uD83C\uDF34", rarity:
"Common", cash: [6, 20, 100, 975, 7500], time: [3, 3, 1, 1, 1], price: [390, 6e3, 7e4, 61e4] },
{ name: "Jaguar", color: "#fbb040", class: "\uD83C\uDF34", rarity:
"Common", cash: [8, 28, 230, 1600, 17e3], time: [3, 3, 2, 2, 2], price: [390, 6e3, 7e4, 61e4] },
{ name: "Toucan", color: "#ffca34", class: "\uD83C\uDF34", rarity:
"Common", cash: [9, 20, 175, 625, 3800], time: [2, 2, 2, 1, 1], price: [520, 4800, 42e3, 3e5] },
{ name: "Cockatoo", color: "#7ca1d5", class: "\uD83C\uDF34", rarity:
"Common", cash: [6, 35, 160, 1700, 18e3], time: [4, 4, 2, 2, 2], price: [500, 5e3, 63e3, 7e5] },
{ name: "Macaw", color: "#00aeef", class: "\uD83C\uDF34", rarity:
"Common", cash: [3, 8, 85, 850, 8500], time: [1, 1, 1, 1, 1], price: [480, 5400, 62e3, 63e4] },
{ name: "Parrot", color: "#ed1c24", class: "\uD83C\uDF34", rarity:
"Common", cash: [3, 9, 90, 900, 9e3], time: [1, 1, 1, 1, 1], price: [540, 5700, 65e3, 69e4] },
{ name: "Panther", color: "#2f2c38", class: "\uD83C\uDF34", rarity:
"Common", cash: [12, 28, 215, 2100, 21e3], time: [5, 3, 2, 2, 2], price: [530, 6500, 76e3,
87e4] },
{ name: "Anaconda", color: "#8a9143", class: "\uD83C\uDF34", rarity:
"Common", cash: [3, 15, 85, 1500, 7600], time: [1, 2, 1, 2, 1], price: [410, 5100, 58e3, 59e4]
},
{ name: "Orangutan", color: "#bc6234", class: "\uD83C\uDF34", rarity:
"Common", cash: [13, 52, 570, 4300, 7e4], time: [5, 5, 5, 4, 4], price: [600, 7e3, 8e4, 14e5] },
{ name: "Capuchin", color: "#e0b0a6", class: "\uD83C\uDF34", rarity:
"Common", cash: [4, 14, 160, 780, 8200], time: [2, 2, 2, 1, 1], price: [390, 4700, 57e3, 68e4]
⚔️
},
{ name: "Elf", color: "#a7d054", class: " ", rarity: "Uncommon", cash:
⚔️
[5e3, 15e3, 15e4, 15e5, 1e7], time: [1, 1, 1, 1, 1], price: [8e5, 9e6, 11e7, 8e8] },
{ name: "Witch", color: "#4ab96d", class: " ", rarity: "Uncommon",
⚔️
cash: [18e3, 6e4, 4e4, 4e6, 35e6], time: [3, 3, 2, 2, 2], price: [11e5, 12e6, 15e7, 14e8] },
{ name: "Wizard", color: "#5a459c", class: " ", rarity: "Uncommon",
⚔️
cash: [19500, 65e3, 44e4, 46e5, 4e6], time: [3, 3, 2, 2, 2], price: [13e5, 135e5, 16e7, 16e8] },
{ name: "Fairy", color: "#df6d9c", class: " ", rarity: "Uncommon", cash:
⚔️
[18500, 6e4, 62e4, 44e5, 38e6], time: [3, 3, 3, 2, 2], price: [12e5, 125e5, 15e6, 15e8] },
{ name: "Slime Monster", color: "#2fa04a", class: " ", rarity:
"Uncommon", cash: [35e3, 14e4, 1e6, 11e6, 11e7], time: [5, 5, 4, 4, 4], price: [16e5, 15e6,
⚔️
2e8, 23e8] },
{ name: "Jester", color: "#be1e2d", class: " ", rarity: "Rare", cash:
⚔️
[25e3, 1e5, 68e4, 65e5, 32e6], time: [3, 3, 2, 2, 1], price: [2e6, 21e6, 23e7, 26e8] },
{ name: "Dragon", color: "#2fa04a", class: " ", rarity: "Rare", cash:
⚔️
[36e3, 15e4, 15e5, 15e6, 15e7], time: [4, 4, 4, 4, 4], price: [23e5, 24e6, 27e7, 3e9] },
{ name: "Unicorn", color: "#f6afce", class: " ", rarity: "Epic", cash:
⚔️
[24e3, 15e4, 14e5, 7e6, 75e6], time: [2, 2, 2, 1, 1], price: [45e5, 45e6, 55e7, 65e8] },
{ name: "Queen", color: "#9e1f63", class: " ", rarity: "Rare", cash:
[24e3, 95e3, 95e4, 97e5, 95e6], time: [3, 3, 3, 3, 3], price: [19e5, 2e7, 23e7, 25e8] },
⚔️
{ name: "King", color: "#ee2640", class: " ", rarity: "Legendary", cash:
[75e3, 4e5, 6e6, 9e7, 125e7], time: [5, 5, 5, 5, 5], price: [6e6, 95e6, 16e8, 25e9] },
{ name: "Two of Spades", color: "#414042", class: "\uD83C\uDFF0",
rarity: "Uncommon", cash: [4500, 14e3, 14e4, 14e5, 9e6], time: [1, 1, 1, 1, 1], price: [77e4,
83e5, 98e6, 71e7] },
{ name: "Eat Me", color: "#d58c55", class: "\uD83C\uDFF0", rarity:
"Uncommon", cash: [13e3, 45e3, 45e4, 45e5, 5e7], time: [2, 2, 2, 2, 2], price: [13e5, 14e6,
16e7, 2e9] },
{ name: "Drink Me", color: "#dd7399", class: "\uD83C\uDFF0", rarity:
"Uncommon", cash: [12e3, 4e4, 4e5, 4e6, 45e6], time: [2, 2, 2, 2, 2], price: [12e5, 12e6,
14e7, 18e8] },
{ name: "Alice", color: "#4cc9f5", class: "\uD83C\uDFF0", rarity:
"Uncommon", cash: [13e3, 42e3, 21e4, 21e5, 23e6], time: [2, 2, 1, 1, 1], price: [12e5, 13e6,
15e7, 19e8] },
{ name: "Queen of Hearts", color: "#d62027", class: "\uD83C\uDFF0",
rarity: "Uncommon", cash: [23e3, 87e3, 62e4, 75e5, 9e7], time: [4, 4, 3, 3, 3], price: [13e5,
13e6, 18e7, 24e8] },
{ name: "Dormouse", color: "#89d6f8", class: "\uD83C\uDFF0", rarity:
"Rare", cash: [17e3, 68e3, 7e5, 35e5, 35e6], time: [2, 2, 1, 1, 1], price: [2e6, 22e6, 25e7,
28e8] },
{ name: "White Rabbit", color: "#ffcd05", class: "\uD83C\uDFF0", rarity:
"Rare", cash: [26e3, 105e3, 11e6, 77e5, 72e6], time: [3, 3, 3, 2, 2], price: [2e6, 23e6, 28e7,
29e8] },
{ name: "Cheshire Cat", color: "#dd7399", class: "\uD83C\uDFF0", rarity:
"Rare", cash: [32e3, 1e5, 9e5, 9e6, 6e7], time: [4, 3, 3, 3, 2], price: [18e5, 19e6, 22e7, 24e8]
},
{ name: "Caterpillar", color: "#00c0f3", class: "\uD83C\uDFF0", rarity:
"Epic", cash: [1e4, 7e4, 65e4, 75e5, 85e6], time: [1, 1, 1, 1, 1], price: [42e5, 42e6, 54e7,
69e8] },
{ name: "Mad Hatter", color: "#914f93", class: "\uD83C\uDFF0", rarity:
"Epic", cash: [38e3, 25e4, 15e5, 14e6, 8e7], time: [3, 3, 2, 2, 1], price: [48e5, 48e6, 52e7,
66e8] },
{ name: "King of Hearts", color: "#c62127", class: "\uD83C\uDFF0",
rarity: "Legendary", cash: [8e4, 42e4, 68e5, 1e8, 15e8], time: [5, 5, 5, 5, 5], price: [7e6, 11e7,
18e8, 3e10] },
{ name: "Earth", color: "#416eb5", class: "\uD83D\uDE80", rarity:
"Uncommon", cash: [15e3, 45e3, 6e5, 65e5, 65e6], time: [3, 3, 3, 3, 3], price: [1e6, 11e6,
15e7, 17e8] },
{ name: "Meteor", color: "#c68c3c", class: "\uD83D\uDE80", rarity:
"Uncommon", cash: [23e3, 65e3, 7e5, 45e5, 2e7], time: [5, 4, 3, 2, 1], price: [95e4, 13e6,
16e7, 16e8] },
{ name: "Stars", color: "#19184d", class: "\uD83D\uDE80", rarity:
"Uncommon", cash: [1e4, 4e4, 2e5, 2e6, 18e6], time: [2, 2, 1, 1, 1], price: [14e5, 14e6, 15e7,
15e8] },
{ name: "Alien", color: "#8dc63f", class: "\uD83D\uDE80", rarity:
"Uncommon", cash: [3e4, 1e5, 1e6, 11e6, 85e6], time: [4, 4, 4, 4, 4], price: [15e5, 17e6,
19e7, 17e8] },
{ name: "Planet", color: "#9dc6ea", class: "\uD83D\uDE80", rarity:
"Rare", cash: [25e3, 1e5, 9e5, 9e6, 9e7], time: [3, 3, 3, 3, 3], price: [2e6, 21e6, 21e7, 24e8]
},
{ name: "UFO", color: "#a15095", class: "\uD83D\uDE80", rarity: "Rare",
cash: [17e3, 7e4, 7e5, 7e6, 7e7], time: [2, 2, 2, 2, 2], price: [21e5, 23e6, 25e7, 28e8] },
{ name: "Spaceship", color: "#ffcb29", class: "\uD83D\uDE80", rarity:
"Epic", cash: [6e4, 32e4, 21e5, 15e6, 85e6], time: [5, 4, 3, 2, 1], price: [48e5, 46e6, 54e7,
68e8] },
{ name: "Astronaut", color: "#9bd4ee", class: "\uD83D\uDE80", rarity:
"Legendary", cash: [45e3, 26e4, 25e5, 38e6, 55e7], time: [3, 3, 2, 2, 2], price: [65e5, 1e8,
17e8, 27e9] },
{ name: "Lil Bot", color: "#3e564a", class: "\uD83E\uDD16", rarity:
"Uncommon", cash: [4e3, 12e3, 18e4, 19e5, 25e6], time: [1, 1, 1, 1, 1], price: [73e4, 12e6,
13e7, 19e8] },
{ name: "Lovely Bot", color: "#f179af", class: "\uD83E\uDD16", rarity:
"Uncommon", cash: [16e3, 65e3, 65e4, 48e5, 42e6], time: [3, 3, 3, 2, 2], price: [13e5, 14e6,
17e7, 16e8] },
{ name: "Angry Bot", color: "#f1613a", class: "\uD83E\uDD16", rarity:
"Uncommon", cash: [22e3, 85e3, 8e5, 62e5, 65e6], time: [4, 4, 4, 3, 3], price: [12e5, 13e6,
15e7, 17e8] },
{ name: "Happy Bot", color: "#51ba6b", class: "\uD83E\uDD16", rarity:
"Uncommon", cash: [11e3, 45e3, 5e5, 25e5, 3e7], time: [2, 2, 2, 1, 1], price: [14e5, 15e6,
18e7, 24e8] },
{ name: "Watson", color: "#d69b5a", class: "\uD83E\uDD16", rarity:
"Rare", cash: [24e3, 1e5, 1e6, 1e7, 1e8], time: [3, 3, 3, 3, 3], price: [2e6, 22e6, 24e7, 26e8]
},
{ name: "Buddy Bot", color: "#9dc6ea", class: "\uD83E\uDD16", rarity:
"Rare", cash: [22e3, 95e3, 65e4, 65e5, 65e6], time: [3, 3, 2, 2, 2], price: [19e5, 21e6, 23e7,
25e8] },
{ name: "Brainy Bot", color: "#9ecf7a", class: "\uD83E\uDD16", rarity:
"Epic", cash: [5e4, 25e4, 21e5, 21e6, 17e7], time: [4, 3, 3, 3, 2], price: [5e6, 46e6, 5e8,
67e8] },
{ name: "Mega Bot", color: "#d71f27", class: "\uD83E\uDD16", rarity:
"Legendary", cash: [8e4, 43e4, 42e5, 62e6, 1e9], time: [5, 5, 3, 3, 3], price: [7e6, 12e7,
19e8, 35e9] },
].map((x) => ({ name: x.name, value: JSON.stringify(x) })),
},
],
run: function (blook) {
const stateNode = getStateNode();
if (stateNode.state.blooks.length >= 10) alert("Choose a blook to replace");
stateNode.waiting = false;
stateNode.chooseBlook(JSON.parse(blook));
},
},
{
name: "Free Upgrades",
description: "Sets upgrade prices to 0 for all current blooks",
run: function () {
const prices = [0, 0, 0, 0];
let stateNode = getStateNode();
stateNode.setState({ blooks: stateNode.state.blooks.map((blook) =>
((blook.price = prices), blook)) });
},
},
{
name: "Max Blooks",
description: "Maxes out all your blooks' levels",
run: function () {
getStateNode().state.blooks.forEach((blook) => (blook.level = 4));
},
},
{
name: "Remove Glitches",
description: "Removes all enemy glitches",
run: function () {
let stateNode = getStateNode();
stateNode.setState({
bits: 0,
ads: [],
hazards: [],
color: "",
lol: false,
joke: false,
slow: false,
dance: false,
glitch: "",
glitcherName: "",
glitcherBlook: "",
});
clearTimeout(stateNode.adTimeout);
clearInterval(stateNode.hazardInterval);
clearTimeout(stateNode.nightTimeout);
clearTimeout(stateNode.glitchTimeout);
clearTimeout(stateNode.lolTimeout);
clearTimeout(stateNode.jokeTimeout);
clearTimeout(stateNode.slowTimeout);
clearTimeout(stateNode.danceTimeout);
clearTimeout(stateNode.nameTimeout);
},
},
{
name: "Send Glitch",
description: "Sends a glitch to everyone else playing",
inputs: [
{
name: "Glitch",
type: "options",
options: Object.entries({ lb: "Lunch Break", as: "Ad Spam", e37: "Error 37",
nt: "Night Time", lo: "#LOL", j: "Jokester", sm: "Slow Mo", dp: "Dance Party", v: "Vortex", r:
"Reverse", f: "Flip", m: "Micro" }).map(
([value, name]) => ({ name, value })
),
},
],
run: function (val) {
let stateNode = getStateNode();
stateNode.safe = true;
stateNode.props.liveGameController.setVal({ path:
`c/${stateNode.props.client.name}/tat`, val });
},
},
{
name: "Set All MegaBot",
description: "Sets all your blooks to maxed out Mega Bots",
run: function () {
getStateNode().setState({
blooks: Array.from({ length: 10 }, () => ({
name: "Mega Bot",
🤖
color: "#d71f27",
class: " ",
rarity: "Legendary",
cash: [8e4, 43e4, 42e5, 62e6, 1e9],
time: [5, 5, 3, 3, 3],
price: [7e6, 12e7, 19e8, 35e9],
active: false,
level: 4,
bonus: 5.5,
})),
});
},
},
{
name: "Set Cash",
description: "Sets amount of cash you have",
inputs: [
{
name: "Cash",
type: "number",
},
],
run: function (cash) {
getStateNode().setState({ cash });
},
},
],
racing: [
{
name: "Instant Win",
description: "Instantly Wins the race",
run: function () {
const stateNode = getStateNode();
stateNode.setState({ progress: stateNode.state.goalAmount });
stateNode.props.liveGameController.setVal({
path: "c/" + stateNode.props.client.name + "/pr",
val: stateNode.state.goalAmount,
});
},
},
{
name: "Set Questions",
description: "Sets the number of questions left",
inputs: [
{
name: "Questions",
type: "number",
},
],
run: function (progress) {
let stateNode = getStateNode();
progress = stateNode.props.client.amount - progress;
stateNode.setState({ progress });
stateNode.props.liveGameController.setVal({
path: "c/" + stateNode.props.client.name + "/pr",
val: progress,
});
},
},
],
rush: [
{
name: "Set Blooks",
description: "Sets amount of blooks you or your team has",
inputs: [
{
name: "Blooks",
type: "number",
},
],
run: function (numBlooks) {
let stateNode = getStateNode();
stateNode.setState({ numBlooks });
stateNode.props.liveGameController.setVal({
path: (stateNode.isTeam ? "a/" : "c/") + stateNode.props.client.name +
"/bs",
val: numBlooks,
});
},
},
{
name: "Set Defense",
description: "Sets amount of defense you or your team has (Max 4)",
inputs: [
{
name: "Defense (max 4)",
type: "number",
max: 4,
},
],
run: function (defense) {
let numDefense = Math.min(defense, 4);
let stateNode = getStateNode();
stateNode.setState({ numDefense });
stateNode.props.liveGameController.setVal({
path: (stateNode.isTeam ? "a/" : "c/") + stateNode.props.client.name + "/d",
val: numDefense,
});
},
},
],
tower: [
{
name: "Fill Deck",
description: "Fills your deck with every maxed out card and artifact (Only works
on towers page)",
run: function () {
if (window.location.pathname == "/tower/map") {
const stateNode = getStateNode();
stateNode.props.tower.artifacts =
"Medical Kit|Fury Relic|Survival Guide|Steel Socks|Piggy Bank|Lucky
Feather|Coupon|Cheese|Tasty Egg|Training Weights|Mighty Shield|Toxic Waste|Lifeline
Totem|Cursed Hourglass|Band-Aid|Elder Coins|Captain's Anchor|Chess Pieces|Pink
Hippo|Anorak's Wizard Cap|Dave's Doggo|Anubis' Obelisk|Farm Tractor|Magic
Seedling|Just A Bone|Cozy Igloo|King's Crown|Sacred Scroll".split(
"|"
);
stateNode.props.tower.cards =
🌽 🌽 🌽 🌽 🌽 🌽 🌽 🌽 🌽|Cat,🐾
🐾 🐾 🐾 🐾 🐾 🐾 🌲 🌲|Fox,🌲
"Chick, |Chicken, |Cow, |Goat, |Horse, |Pig, |Sheep, |Duck, |Dog,
|Rabbit, |Goldfish, |Hamster, |Turtle, |Kitten, |Puppy, |Bear, |Moose,
🌲 🌲 🌲 🌲 ❄️ ❄️
❄️ ❄️ ❄️
|Raccoon, |Squirrel, |Owl, |Hedgehog, |Baby Penguin, |Penguin, |Arctic
❄️ ❄️ ❄️ 🌴 🌴 🌴 🌴 🌴
Fox, |Snowy Owl, |Polar Bear, |Arctic
🌴 🌴 🌴 🌴 🌴 ⚔️ ⚔️ ⚔️ ⚔️
Hare, |Seal, |Walrus, |Tiger, |Panther, |Cockatoo, |Orangutan, |Anaconda, |
⚔️ ⚔️ ⚔️ ⚔️ ⚔️ ⚔️
Macaw, |Jaguar, |Capuchin, |Toucan, |Parrot, |Elf, |Witch, |Wizard, |Fairy,
☃️ ☃️ ☃️ ☃️
|Slime Monster, |Jester, |Dragon, |Unicorn, |Queen, |King, |Snow
☃️ ☃️ ☃️ ☃️ 🏰
Globe, |Holiday Gift, |Hot Chocolate, |Gingerbread Man, |Gingerbread
🏰 🏰 🏰 🏰 🏰 🏰
House, |Holiday Wreath, |Snowman, |Santa Claus, |Two of Spades, |Eat
🏰 🏰 🏰 🏰
Me, |Drink Me, |Alice, |Queen of Hearts, |Dormouse, |White Rabbit, |Cheshire
Cat, |Caterpillar, |Mad Hatter, |King of Hearts, "
.split("|")
.map((x) => {
const [blook, c] = x.split(",");
return { strength: 20, charisma: 20, wisdom: 20, class: c, blook };
});
try {
stateNode.props.addTowerNode();
} catch {}
stateNode.setState({ showDeck: false });
} else alert("You need to be on the map to run this cheat!");
},
},
{
name: "Max Cards",
description: "Maxes out all the cards in your deck",
run: function () {
if (window.location.pathname == "/tower/map") {
const stateNode = getStateNode();
stateNode.props.tower.cards.forEach((card) => {
card.strength = 20;
card.charisma = 20;
card.wisdom = 20;
});
try {
stateNode.forceUpdate();
} catch {}
} else alert("You need to be on the map to run this cheat!");
},
},
{
name: "Max Health",
description: "Fills the player's health",
run: function () {
if (window.location.pathname == "/tower/battle") getStateNode().setState({
myHealth: 100, myLife: 100 });
else alert("You need to be in battle to run this cheat!");
},
},
{
name: "Max Card Stats",
description: "Maxes out player's current card (Only works on attribute select
page)",
run: function () {
const stateNode = getStateNode();
if (stateNode.state.phase !== "select") alert("You must be on the attribute
selection page!");
else stateNode.setState({ myCard: { ...stateNode.state.myCard, strength: 20,
charisma: 20, wisdom: 20 } });
},
},
{
name: "Min Enemy Stats",
description: "Makes the enemy card stats all 0 (Only works on attribute select
page)",
run: function () {
const stateNode = getStateNode();
if (stateNode.state.phase !== "select") alert("You must be on the attribute
selection page!");
else stateNode.setState({ enemyCard: { ...stateNode.state.enemyCard,
strength: 0, charisma: 0, wisdom: 0 } });
},
},
{
name: "Set Coins",
description: "Try's to set amount of tower coins you have",
inputs: [
{
name: "Coins",
type: "number",
},
],
run: function (coins) {
if (window.location.pathname == "/tower/battle")
try {
getStateNode().props.setTowerCoins(coins);
} catch {}
else alert("You need to be in battle to run this cheat!");
},
},
],
kingdom: [
{
name: "Choice ESP",
description: "Shows you what will happen if you say Yes or No",
type: "toggle",
enabled: false,
data: null,
run: function () {
if (!this.enabled) {
this.enabled = true;
this.data = setInterval(
(stats) => {
let stateNode = getStateNode();
let elements =
Array.prototype.reduce.call(document.querySelectorAll("[class*=statContainer]"), (obj,
container, i) => ((obj[stats[i]] = container), obj), {});
if (stateNode.state.phase == "choice") {
Object.values(document.querySelector("#phaser-bouncy"))[0].return.updateQueue.lastEffect
.deps[1](score || 0);
},
},
],
settings: [
{
name: "Import Settings",
description: "Import a custom theme",
inputs: [
{
name: "JSON Data",
type: "string",
},
],
run: function (theme) {
try {
JSON.parse(theme);
} catch (e) {
return alert("Invalid JSON provided");
}
theme = {
backgroundColor: "rgb(11, 194, 207)",
infoColor: "#9a49aa",
cheatList: "#9a49aa",
defaultButton: "#9a49aa",
disabledButton: "#A02626",
enabledButton: "#47A547",
textColor: "white",
inputColor: "#7a039d",
contentBackground: "rgb(64, 17, 95)",
...JSON.parse(theme),
};
Settings.setItem("theme", theme);
for (const prop in theme)
variables.sheet.cssRules[0].style.setProperty(`--${prop}`, theme[prop]);
},
},
{
name: "Export Settings",
description: "Export the current theme to JSON",
run: async function () {
await navigator.clipboard.writeText(JSON.stringify(Settings.data.theme, null,
4));
prompt("Text copied to clipboard. (Paste below to test)");
},
},
{
name: "Defaults",
description: "Changes all the settings to a preset",
inputs: [
{
name: "Theme",
type: "options",
options: [
{
name: "Default",
value: {
backgroundColor: "rgb(11, 194, 207)",
infoColor: "#9a49aa",
cheatList: "#9a49aa",
defaultButton: "#9a49aa",
disabledButton: "#A02626",
enabledButton: "#47A547",
textColor: "white",
inputColor: "#7a039d",
contentBackground: "rgb(64, 17, 95)",
},
},
{
name: "Blacket",
value: {
backgroundColor: "#4f4f4f",
infoColor: "#2f2f2f",
cheatList: "#2f2f2f",
defaultButton: "#4f4f4f",
disabledButton: "#eb6234",
enabledButton: "#00c20c",
textColor: "white",
inputColor: "#3f3f3f",
contentBackground: "#2f2f2f",
},
},
{
name: "Skool.lol",
value: {
backgroundColor: "linear-gradient(90deg, rgba(104,45,140,1)
220px, rgba(237,30,121,1) 100%)",
cheatList: "#1e2124",
infoColor: "#1e2124",
defaultButton: "#36393e",
inputColor: "#1e2124",
enabledButton: "#9c9a9a",
textColor: "white",
disabledButton: "#171717",
contentBackground: "#292929",
},
},
{
name: "Blue - Purple Background",
value: {
backgroundColor: "linear-gradient(162.5deg, rgba(0,183,255,1)
220px, rgba(128,0,255,1) 100%)",
},
},
{
name: "Saint Patricks Background",
value: {
backgroundColor: "rgb(9, 148, 65)",
},
},
{
name: "Halloween Background",
value: {
backgroundColor: "rgb(41, 41, 41)",
},
},
{
name: "Fall Background",
value: {
backgroundColor: "rgb(224, 159, 62)",
},
},
{
name: "Winter Background",
value: {
backgroundColor: "linear-gradient(rgb(49, 170, 224), rgb(187, 221,
255))",
},
},
{
name: "Crypto Hack",
value: {
backgroundColor: "radial-gradient(#11581e,#041607)",
infoColor: "#1a1a1a",
cheatList: "#1a1a1a",
defaultButton: "rgb(88 175 88)",
disabledButton: "#A02626",
enabledButton: "#0b601b",
textColor: "white",
inputColor: "rgb(0 0 0 / 25%)",
contentBackground: "#11581e",
},
},
{
name: "Fishing Frenzy",
value: {
backgroundColor: "linear-gradient(180deg,#9be2fe 0,#67d1fb)",
infoColor: "#c8591e",
cheatList: "#c8591e",
defaultButton: "#ff751a",
disabledButton: "#bf0e0e",
enabledButton: "#2fb62f",
textColor: "white",
inputColor: "rgb(0 0 0 / 25%)",
contentBackground: "radial-gradient(#02b0ea 40%, #1d86ea)",
},
},
{
name: "Deceptive Dinos",
value: {
backgroundColor: 'radial-gradient(rgba(220, 184, 86, 0), rgba(220,
184, 86, 0.4)), url("https://ac.blooket.com/play/111cb7e0ee6607ac3d1a13d534c0e0f1.png"),
#ead49a',
infoColor: "#af8942",
cheatList: "#af8942",
defaultButton: "#af8942",
disabledButton: "#A02626",
enabledButton: "#47A547",
textColor: "white",
inputColor: "rgb(0 0 0 / 10%)",
contentBackground:
"radial-gradient(rgba(1,104,162,.6),rgba(24,55,110,.5)),radial-gradient(#2783b4
1.5px,#18376e 0) center / 24px 24px",
},
},
{
name: "Blook Rush",
value: {
backgroundColor: "repeating-linear-gradient(45deg,white,white
8%,#e6e6e6 0,#e6e6e6 16%)",
defaultButton: "#36c",
inputColor: "rgb(0 0 0 / 25%)",
infoColor: "#36c",
cheatList: "#36c",
contentBackground: "#888",
textColor: "white",
disabledButton: "#A02626",
enabledButton: "#47A547",
},
},
{
name: "Factory",
value: {
defaultButton: "#1563bf",
infoColor: "#a5aabe",
cheatList: "#a5aabe",
contentBackground: "#2d313d",
backgroundColor: "#3a3a3a",
enabledButton: "rgb(75, 194, 46)",
disabledButton: "#9a49aa",
inputColor: "rgb(0 0 0 / 25%)",
textColor: "white",
},
},
{
name: "Cafe",
value: {
backgroundColor: "linear-gradient(90deg,rgba(200,0,0,.5)
50%,transparent 0) center / 50px 50px,linear-gradient(rgba(200,0,0,0.5) 50%,transparent 0)
white center / 50px 50px",
defaultButton: "#0bc2cf",
inputColor: "rgb(0 0 0 / 25%)",
infoColor: "#ac7339",
cheatList: "#ac7339",
contentBackground: "rgb(64, 64, 64)",
textColor: "white",
disabledButton: "#A02626",
enabledButton: "#47A547",
},
},
{
name: "Tower of Doom",
value: {
backgroundColor: "rgb(41 41 41)",
disabledButton: "rgb(151, 15, 5)",
defaultButton: "#333",
inputColor: "rgb(0 0 0 / 25%)",
contentBackground: "#404040",
enabledButton: "#4bc22e",
textColor: "white",
infoColor: "#9a49aa",
cheatList: "#9a49aa",
},
},
{
name: "Monster Brawl",
value: {
defaultButton: "rgb(45, 51, 67)",
backgroundColor: "rgb(78, 95, 124)",
inputColor: "rgb(0 0 0 / 25%)",
contentBackground: "linear-gradient(0deg,#374154,#4f5b74)",
infoColor: "#374154",
cheatList: "#374154",
textColor: "white",
enabledButton: "#47A547",
disabledButton: "#A02626",
},
},
{
name: "Tower Defense 2",
value: {
backgroundColor:
"url(https://media.blooket.com/image/upload/v1676164454/Media/defense/backgroundTd1-0
2.svg) center / cover",
cheatList: "#a33c22",
infoColor: "#a33c22",
defaultButton: "#40b1d8",
inputColor: "#3e8cbe",
contentBackground: "#293c82",
enabledButton: "#47A547",
disabledButton: "#A02626",
textColor: "white",
},
},
],
},
],
run: function (theme) {
Settings.setItem("theme", { ...Settings.data.theme, ...theme });
for (const prop in theme)
variables.sheet.cssRules[0].style.setProperty(`--${prop}`, theme[prop]);
},
},
{
name: "Scale",
description: "Forces the GUI to scale from 25%-100%",
inputs: [
{
type: "number",
name: "Percent scale",
min: 25,
max: 100,
value: (Settings.data.scale || 1) * 100,
},
],
run: function (scale) {
scale = Math.min(Math.max(scale, 25), 100);
Settings.setItem("scale", scale / 100);
guiWrapper.style.transform = `scale(${scale / 100})`;
},
},
{
name: "Hide Keybind",
description: "Change the hide keybind (Click button after input to change)",
inputs: [
{
type: "function",
name: "Input",
function: (onchange) => createKeybindListener(({ shift, ctrl, alt, key }) =>
onchange(`${[ctrl && "Ctrl", shift && "Shift", alt && "Alt", key &&
key.toUpperCase()].filter(Boolean).join(" + ")}`)),
},
],
run: function (hide) {
Settings.setItem("hide", hide);
controls.update(Settings.data.hide || { ctrl: true, key: "e" }, Settings.data.close
|| { ctrl: true, key: "x" });
},
},
{
name: "Close Keybind",
description: "Change the quick close keybind (Click button after input to
change)",
inputs: [
{
type: "function",
name: "Input",
function: (onchange) => createKeybindListener(({ shift, ctrl, alt, key }) =>
onchange(`${[ctrl && "Ctrl", shift && "Shift", alt && "Alt", key &&
key.toUpperCase()].filter(Boolean).join(" + ")}`)),
},
],
run: function (close) {
Settings.setItem("close", close);
controls.update(Settings.data.hide || { ctrl: true, key: "e" }, Settings.data.close
|| { ctrl: true, key: "x" });
},
},
{
name: "Background Color",
description: "Changes the background color of the GUI",
inputs: [
{
type: "string",
name: "Color",
},
],
run: function (color) {
variables.sheet.cssRules[0].style.setProperty("--backgroundColor", color);
Settings.setItem("theme.backgroundColor", color);
},
},
{
name: "Category List Color",
description: "Changes the categories list background color",
inputs: [
{
type: "string",
name: "Color",
},
],
run: function (color) {
variables.sheet.cssRules[0].style.setProperty("--cheatList", color);
Settings.setItem("theme.cheatList", color);
},
},
{
name: "Info Color",
description: "Changes the color of the information at the top of the GUI",
inputs: [
{
type: "string",
name: "Color",
},
],
run: function (color) {
variables.sheet.cssRules[0].style.setProperty("--infoColor", color);
Settings.setItem("theme.infoColor", color);
},
},
{
name: "Button Color",
description: "Changes the color of the cheats",
inputs: [
{
type: "string",
name: "Color",
},
],
run: function (color) {
variables.sheet.cssRules[0].style.setProperty("--defaultButton", color);
Settings.setItem("theme.defaultButton", color);
},
},
{
name: "Enabled Toggle Color",
description: "Changes the color of enabled toggle cheats",
inputs: [
{
type: "string",
name: "Color",
},
],
run: function (color) {
Settings.setItem("theme.enabledButton", color);
},
},
{
name: "Disabled Toggle Color",
description: "Changes the color of disabled toggle cheats",
inputs: [
{
type: "string",
name: "Color",
},
],
run: function (color) {
variables.sheet.cssRules[0].style.setProperty("--disabledButton", color);
Settings.setItem("theme.disabledButton", color);
},
},
{
name: "Text Color",
description: "Changes the text color",
inputs: [
{
type: "string",
name: "Color",
},
],
run: function (color) {
variables.sheet.cssRules[0].style.setProperty("--textColor", color);
Settings.setItem("theme.textColor", color);
},
},
{
name: "Input Color",
description: "Changes the color of inputs, like the set gold number input",
inputs: [
{
type: "string",
name: "Color",
},
],
run: function (color) {
variables.sheet.cssRules[0].style.setProperty("--inputColor", color);
Settings.setItem("theme.inputColor", color);
},
},
{
name: "Content Color",
description: "Changes the background color of the cheats",
inputs: [
{
type: "string",
name: "Color",
},
],
run: function (color) {
variables.sheet.cssRules[0].style.setProperty("--contentBackground", color);
Settings.setItem("theme.contentBackground", color);
},
},
],
};
addMode("Global",
"https://media.blooket.com/image/upload/v1661496291/Media/uiTest/Games_Played_2.svg",
Cheats.global)();
addMode("Gold Quest",
"https://media.blooket.com/image/upload/v1661496292/Media/uiTest/Gold.svg",
Cheats.gold);
addMode("Crypto Hack",
"https://media.blooket.com/image/upload/v1661496293/Media/uiTest/CryptoIcon.svg",
Cheats.hack);
addMode('<span style="font-size: 19px">Fishing Frenzy</span>',
"https://media.blooket.com/image/upload/v1661496295/Media/uiTest/Fish_Weight.svg",
Cheats.fish);
addMode(
'<span style="font-size: 18px">Pirate\'s Voyage</span>',
"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIH
N0YW5kYWxvbmU9Im5vIj8+PCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREI
FNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVE
Qvc3ZnMTEuZHRkIj48c3ZnIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIHZpZXdCb3g9IjA
gMCAzMDAgMzAwIiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMD
AwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHhtb
DpzcGFjZT0icHJlc2VydmUiIHhtbG5zOnNlcmlmPSJodHRwOi8vd3d3LnNlcmlmLmNvbS8iIH
N0eWxlPSJmaWxsLXJ1bGU6ZXZlbm9kZDtjbGlwLXJ1bGU6ZXZlbm9kZDtzdHJva2UtbGluZ
WpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6MjsiPjxnIGlkPSJCb2F0Ij48cGF0aCBkP
SJNMTcwLjQsNTYuMDU0Yy02OC43ODgsMTAuMTc0IC0xMTUuOTcxLDU2LjkzOCAtMTQ1
LjQxMSwxMzMuNzVsMTUuNDY5LDcuNzM0YzMwLjk2MiwtMjguMTc1IDc0LjcwNSwtMzcuN
zg3IDEzMi4zMjIsLTI3LjI1bDAsLTE3LjYxMWMtMjUuNjI5LC0yNy45NTIgLTI2Ljk2NiwtNTYuN
zcyIDAuNzE0LC04Ni42MjhsLTMuMDk0LC05Ljk5NVoiIHN0eWxlPSJmaWxsOiNmNmUwYm
Q7Ii8+PHBhdGggZD0iTTE5OS42NzMsNjAuODEzYzMyLjc4NCw0Mi45ODIgNjUuODIyLDk
wLjg4NyA5Ny4zMzcsMTM5LjU4MWwtNi42NjMsMGMtMTIuMDg1LC0zMS4xMTEgLTU3Ljg
4MiwtMzkuNjk0IC05MS42MjYsLTI3LjI1YzIyLjUxNCwtMzQuNTc5IDE3Ljc5NiwtNzIuNjczIDAu
OTUyLC0xMTIuMzMxWiIgc3R5bGU9ImZpbGw6I2Y2ZTBiZDsiLz48cGF0aCBkPSJNNjkuND
Q4LDE5Ny41MzhjMCwwIC01OS43MDcsLTE1LjI0MyAtNjguMzk4LC0xNy40NjJjLTAuMDc2L
C0wLjAxOSAtMC4xNTQsMC4wMiAtMC4xODQsMC4wOTJjLTAuMDMsMC4wNzIgLTAuMD
AyLDAuMTU1IDAuMDY1LDAuMTk1YzkuNjgyLDUuNzc1IDkxLjY0Nyw1NC42NTggOTEuNj
Q3LDU0LjY1OGwtMjMuMTMsLTM3LjQ4M1oiIHN0eWxlPSJmaWxsOiM4ZDZlNDE7Ii8+PHB
hdGggZD0iTTE2NC40NSw0Ny45MDNjMCwtNS4zNTMgNC4zNDYsLTkuNjk4IDkuNjk4LC05
LjY5OGwxOS4zOTcsLTBjNS4zNTIsLTAgOS42OTgsNC4zNDUgOS42OTgsOS42OThsLTAs
MTU2Ljk1M2MtMCw1LjM1MyAtNC4zNDYsOS42OTggLTkuNjk4LDkuNjk4bC0xOS4zOTcsM
GMtNS4zNTIsMCAtOS42OTgsLTQuMzQ1IC05LjY5OCwtOS42OThsMCwtMTU2Ljk1M1oiIH
N0eWxlPSJmaWxsOiM3ZjY4NDU7Ii8+PHBhdGggZD0iTTI2My45OTMsMjU2LjEwM2MyMi4
xNzEsLTE0LjcxIDM2LjAwNywtMzUuNTE1IDM2LjAwNywtNTguNTY1bC0yMzAuNTUyLDBj
MCwyMy43MTMgMTQuNjQzLDQ1LjA1IDM3Ljk0LDU5LjgxOWM5Ljg3NSwtMy43MjkgMjAu
MDQxLC0xMS4zMzQgMzAuNDYzLC0yMi4zMzZjMzIuODExLDM1LjQ1NSA2NC4wNjksMz
UuOTQzIDkzLjcwOCwwYzYuODM4LDkuNjc3IDE3LjczNiwxNi42NDYgMzIuNDM0LDIxLjA4
MloiIHN0eWxlPSJmaWxsOiNiNjkyNWY7Ii8+PC9nPjwvc3ZnPg==",
Cheats.pirate
);
addMode('<span style="font-size: 16px">Tower Defense 2</span>', [`<img style="width:
30px; margin-right: 5px; rotate: 45deg"
src="https://media.blooket.com/image/upload/v1593095354/Media/defense/missile.svg">`],
Cheats.defense2);
addMode('<span style="font-size: 18px">Monster Brawl</span>', [`<img style="height:
28px; margin-left: 5px; margin-right: 8px"
src="https://media.blooket.com/image/upload/v1655233787/Media/survivor/xp/Blue_xp_2.sv
g">`], Cheats.brawl);
addMode('<span style="font-size: 17px">Deceptive Dinos</span>', [`<img
style="height: 30px; margin-left: 8px; margin-right: 12px"
src="https://media.blooket.com/image/upload/v1655161325/Media/survivor/Dog.svg">`],
Cheats.dino);
addMode("Battle Royale",
"https://media.blooket.com/image/upload/v1655936179/Media/br/VS_Lightning_Bolt_Bottom.
svg", Cheats.royale);
addMode('<span style="font-size: 18px">Tower Defense</span>', [`<img style="width:
30px; margin-right: 5px"
src="https://media.blooket.com/image/upload/v1657235025/Media/survivor/Laser_Lvl1.svg">
`], Cheats.defense);
addMode("Cafe",
"https://media.blooket.com/image/upload/v1655161189/Media/survivor/Pizza_lvl1.svg",
Cheats.cafe);
addMode("Factory",
"https://media.blooket.com/image/upload/v1661496293/Media/uiTest/Factory_Upgrades.svg"
, Cheats.factory);
addMode("Racing",
"https://media.blooket.com/image/upload/v1661496295/Media/uiTest/Racing_Progress.svg",
Cheats.racing);
addMode(
"Blook Rush",
"data:image/png;base64,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",
Cheats.rush
);
addMode('<span style="font-size: 17px">Tower of Doom</span>', [`<img style="height:
30px; margin-left: 5px; margin-right: 10px"
src="https://media.blooket.com/image/upload/v1657235023/Media/survivor/cards-05.svg">`],
Cheats.tower);
addMode('<span style="font-size: 18px">Crazy Kingdom</span>',
"https://media.blooket.com/image/upload/v1655161323/Media/survivor/Jester_lvl1.svg",
Cheats.kingdom);
addMode(
'<span style="font-size: 15px">Santa\'s Workshop</span>',
[
'<img style="height: 28px; margin-left: 3px; margin-right: 6px"
src="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLT
g4NTktMSI/Pgo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTkuMC4wLCB
TVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+C
jxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4
PSIwcHgiIHk9IjBweCIKCSB2aWV3Qm94PSIwIDAgNTEyIDUxMiIgc3R5bGU9ImVuYWJsZS
1iYWNrZ3JvdW5kOm5ldyAwIDAgNTEyIDUxMjsiIHhtbDpzcGFjZT0icHJlc2VydmUiPgo8cGF
0aCBzdHlsZT0iZmlsbDojRkZERTc2OyIgZD0iTTQzMy42NjEsMjM3LjgzN2MtNC40OTctNi4y
MTQtNC44OC0xNC40NC0xLjIyNS0yMS4xODRjMTEuMzY1LTIwLjk2NywxNy43NzMtNDUu
MDE0LDE3LjY1MS03MC41NjYKCUM0NDkuNzAxLDY0Ljg2OSwzODIuNTY0LTEuMDM3LD
MwMS4zNTIsMC4wMTJjLTgwLjE4MywxLjAzNi0xNDQuODY0LDY2LjM1OS0xNDQuODY0L
DE0Ni43ODhjMCwzMi41NTMsMTAuNTk1LDYyLjYzLDI4LjUyNiw4Ni45NzIKCWM3Ljc1Myw
xMC41MjYsNy4yMTMsMjUuMS0xLjU0MywzNC44MDhjLTEzLjI5NywxNC43NDEtNDEuOTM
1LDI0LjMwNi0xMDIuNTk1LTE2LjI3N2MtNi42NTItNC40NS0xNC40NjItNi44NjQtMjIuNDY1LT
YuODY0bDAsMAoJYy0xOS45NDcsMC0zNi44MzMsMTQuNjI4LTM5Ljc3NiwzNC4zNTdDNy
44ODksMzUxLjgxNiw2LjUyLDUxMiwyMDYuOTY2LDUxMmg3MS4wODNDNDY2LjA1LDUx
Miw1MTYuMTI3LDM1MS44MDEsNDMzLjY2MSwyMzcuODM3eiIvPgo8Zz4KCTxwYXRoIH
N0eWxlPSJmaWxsOiNGRkI2NDE7IiBkPSJNMTgzLjQ3LDI2OC41ODJjLTMuOTMsNC4zNT
ctOS4yMDIsOC4yNjEtMTYuMjQ0LDEwLjU1MmMyNC40NjksNS44ODIsMzguODItMS4zMT
ksNDcuMTQ5LTEwLjU1MgoJCWM4Ljc1Ny05LjcwOCw5LjI5Ni0yNC4yODEsMS41NDMtMz
QuODA4Yy0xNy45My0yNC4zNDItMjguNTI2LTU0LjQyLTI4LjUyNi04Ni45NzNjMC03NS44Mz
MsNTcuNTAzLTEzOC4yMjYsMTMxLjI4MS0xNDUuOTgKCQljLTUuNjg5LTAuNjAxLTExLjQ2
Ny0wLjg4NC0xNy4zMjMtMC44MDljLTgwLjE4MywxLjAzNi0xNDQuODY0LDY2LjM1OS0xND
QuODY0LDE0Ni43ODhjMCwzMi41NTMsMTAuNTk1LDYyLjYzLDI4LjUyNiw4Ni45NzMKCQl
DMTkyLjc2NiwyNDQuMywxOTIuMjI2LDI1OC44NzMsMTgzLjQ3LDI2OC41ODJ6Ii8+Cgk8cG
F0aCBzdHlsZT0iZmlsbDojRkZCNjQxOyIgZD0iTTQ5LjUzOSwyNzkuNzk2YzIuMTM3LTE0Lj
MxNywxMS42MTgtMjUuOTQyLDI0LjI4Mi0zMS4yNDVjLTQuODY2LTIuMDIyLTEwLjA5MS0z
LjExLTE1LjQxMi0zLjExCgkJbDAsMGMtMTkuOTQ3LDAtMzYuODMzLDE0LjYyOC0zOS43N
zYsMzQuMzU3QzcuODg5LDM1MS44MTYsNi41Miw1MTIsMjA2Ljk2Niw1MTJoMzAuOTA1
QzM3LjQyNSw1MTIsMzguNzk0LDM1MS44MTYsNDkuNTM5LDI3OS43OTZ6CgkJIi8+Cgk8
cGF0aCBzdHlsZT0iZmlsbDojRkZCNjQxOyIgZD0iTTgwLjUxOCwzNDQuMzM2Yy04Ljc2Niw
4LjY1Ni0xMC4yNzcsMjIuMjY4LTMuNTk4LDMyLjYxOQoJCWMxOS41MDQsMzAuMjI3LDY4
LjM1MSw4Ni4yODMsMTYyLjM3Miw4Ni4yODNjNTcuMjU2LDAsMTE3Ljc5MS0zNS44MDks
MTI5LjA2NC05NS4wOTdjOS4zMS00OC45NjYtMTkuMjQ2LTEwOC44MjEtNzUuMzMtMTA2
LjI0NwoJCWMtNDEuMDk3LDEuODg3LTY1LjEzNSwzNy40MTUtOTkuODY1LDUzLjg0MW
MtMjQuMzk4LDExLjU0LTUwLjg0NCwxOC42NTEtNzcuNjg3LDIxLjMwNwoJCUMxMDIuNjk4
LDMzOC4zMDYsOTAuODA1LDMzNC4xNzgsODAuNTE4LDM0NC4zMzZ6Ii8+CjwvZz4KPH
BhdGggc3R5bGU9ImZpbGw6IzM4NDg0QTsiIGQ9Ik0zODguMzk0LDExMC44MzNjLTMuNT
AyLDAtNi42NzQtMi4zOTYtNy41MTMtNS45NTFsLTMuNzE1LTE1LjczCgljLTAuOTgxLTQuM
TUzLDEuNTkxLTguMzE1LDUuNzQzLTkuMjk1YzQuMTUyLTAuOTc5LDguMzE1LDEuNTkxL
DkuMjk1LDUuNzQzbDMuNzE1LDE1LjczYzAuOTgxLDQuMTUzLTEuNTkxLDguMzE1LTUu
NzQzLDkuMjk1CglDMzg5LjU4LDExMC43NjUsMzg4Ljk4MiwxMTAuODMzLDM4OC4zOTQs
MTEwLjgzM3oiLz4KPHBhdGggc3R5bGU9ImZpbGw6I0ZGQjY0MTsiIGQ9Ik00MjcuNjE4LDY
4Ljk5NGMwLDAsMy4xOTgsNDUuODMyLTE4LjAzMyw2Ni41OTFjLTIxLjIzMSwyMC43NTks
MTQuMTU0LDUzLjMxNCw1Ni4xNDUsMjIuNjQ2CgljNi4wMzItNC40MDUsMTIuMTQzLTcuMj
A0LDE4LjE4NC04Ljc2OGM3Ljc3Ny0yLjAxMiwxMy4yNDMtOC45NjcsMTMuMjQzLTE2Ljk5O
WwwLDBjMC03LjcyNC01LjAzMS0xNC41OTctMTIuNDM4LTE2Ljc4NgoJYy00LjkyNS0xLjQ1
Ni0xMS4xOC0yLjMyNS0xOC41MTYtMS4zMjVjMCwwLDI1LjM5My0yMi4xMzgsMTkuMTE5
LTQ3Ljc1M2MtMi4wMjctOC4yOC0xMS44NTYtMTEuNzI2LTE4LjgzNi02LjgzMgoJQzQ1Ny4
0NjEsNjYuMDk0LDQ0My40NTQsNzIuNzY0LDQyNy42MTgsNjguOTk0eiIvPgo8Zz4KPC9nP
go8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KP
C9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Z
z4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8L3N2Zz4K">',
],
Cheats.toy
);
addMode("Flappy Blook",
"https://media.blooket.com/image/upload/v1645222006/Blooks/yellowBird.svg",
Cheats.flappy);
addMode("Settings", null, Cheats.settings, true);
dragElement(controls, guiWrapper);
dragElement(dragButton, guiWrapper);
});
let img = new Image;
img.src =
"https://raw.githubusercontent.com/Blooket-Council/Blooket-Cheats/main/autoupdate/timesta
mps/gui.png?" + Date.now();
img.crossOrigin = "Anonymous";
img.onload = function() {
const c = document.createElement("canvas");
const ctx = c.getContext("2d");
ctx.drawImage(img, 0, 0, this.width, this.height);
let { data } = ctx.getImageData(0, 0, this.width, this.height), decode = "", last;
let i = 0;
while (i < data.length) {
let char = String.fromCharCode(data[i % 4 == 3 ? (i++, i++) : i++] + data[i % 4 == 3 ?
(i++, i++) : i++] * 256);
decode += char;
if (char == "/" && last == "*") break;
last = char;
}
let _, time = timeProcessed, error = "There was an error checking for script updates.
Run cheat anyway?";
try {
[_, time, error] = decode.match(/LastUpdated: (.+?); ErrorMessage: "((.|\n)+?)"/);
} catch (e) {}
if ((latestProcess = parseInt(time)) <= timeProcessed ||
iframe.contentWindow.confirm(error)) cheat();
}
img.onerror = img.onabort = () => {
img.onerror = img.onabort = null;
cheat();
let iframe = document.querySelector("iframe");
iframe.contentWindow.alert("It seems the GitHub is either blocked or down.\n\nIf it's
NOT blocked, join the Discord server for updates\nhttps://discord.gg/jHjGrrdXP6\n(The cheat
will still run after this alert)")
}
})();